在机器对机器通信场景中使用的正确字符串比较值是多少?
What is the right string comparison value to be used in a machine to machine communication scenario?
考虑一个场景,您正在实现用于机器对机器通信的代码。典型的例子是在 web API 操作方法中执行的代码。
假设您要对字符串进行精确匹配;也许你有一个用户列表,你想找到一个提供用户名的特定用户:
List<User> users = ....
const string username = "user-123";
var user = users.Find(u => string.Equals(username, u.UserName));
在这种情况下,我应该使用StringComparison.Ordinal
还是StringComparison.InvariantCulture
?
根据我的理解,因为我要对两个字符串进行精确匹配,所以这里选择StringComparison.Ordinal
比较合适。
两个字符串Straße
和strasse
之间文化敏感比较的典型例子,由于语言规则,这两个字符串被认为是相等的,似乎不适合这里。
这个假设是否正确?
如果这是正确的,你能提供一个使用不变文化的例子吗
而不是顺序比较才是正确的选择?
澄清一下,我问这个问题是因为我正在处理一个代码库,其中有大量使用不变区域性的字符串比较。其中许多案例涉及 在机器对机器通信场景 中执行的精确字符串匹配。所以我想确保清楚地了解正确选择字符串比较值背后的基本原理。
从细节来看,如果您的假设是正确的 - 您想要找到名称为 "Bob" 的特定用户。 "Bób" 是不同的用户,不应匹配,即您实际上是在尝试匹配两个符号,而不是用户名的读取方式。
但是,如果您正在查找街道名称,您可能希望代码将 "strasse" 和 "Straße" 视为相同,因为您正在进行语言匹配即客户会以相同的方式阅读这两件事吗?
考虑一个场景,您正在实现用于机器对机器通信的代码。典型的例子是在 web API 操作方法中执行的代码。
假设您要对字符串进行精确匹配;也许你有一个用户列表,你想找到一个提供用户名的特定用户:
List<User> users = ....
const string username = "user-123";
var user = users.Find(u => string.Equals(username, u.UserName));
在这种情况下,我应该使用StringComparison.Ordinal
还是StringComparison.InvariantCulture
?
根据我的理解,因为我要对两个字符串进行精确匹配,所以这里选择StringComparison.Ordinal
比较合适。
两个字符串Straße
和strasse
之间文化敏感比较的典型例子,由于语言规则,这两个字符串被认为是相等的,似乎不适合这里。
这个假设是否正确?
如果这是正确的,你能提供一个使用不变文化的例子吗 而不是顺序比较才是正确的选择?
澄清一下,我问这个问题是因为我正在处理一个代码库,其中有大量使用不变区域性的字符串比较。其中许多案例涉及 在机器对机器通信场景 中执行的精确字符串匹配。所以我想确保清楚地了解正确选择字符串比较值背后的基本原理。
从细节来看,如果您的假设是正确的 - 您想要找到名称为 "Bob" 的特定用户。 "Bób" 是不同的用户,不应匹配,即您实际上是在尝试匹配两个符号,而不是用户名的读取方式。
但是,如果您正在查找街道名称,您可能希望代码将 "strasse" 和 "Straße" 视为相同,因为您正在进行语言匹配即客户会以相同的方式阅读这两件事吗?