在机器对机器通信场景中使用的正确的字符串比较值是多少?

考虑一种情况,您正在实现要用于机器对机器通信的代码。典型的示例是在Web API操作方法中执行的代码。

假设您要在字符串之间执行完全匹配;也许您有一个用户列表,并且想通过提供用户名找到一个特定用户:

List<User> users = ....
const string username = "user-123";
var user = users.Find(u => string.Equals(username, u.UserName));

In such a scneario should I use StringComparison.Ordinal or StringComparison.InvariantCulture ?

Based on my understanding, since I want to perform an exact match between two strings, the proper choice here is StringComparison.Ordinal.

The typical example for culture sensitive comparison between the two strings Straße and strasse, where the two strings are considered equal due to linguistical rules, does not seem to fit here.

这个假设正确吗?

如果这是正确的,您能否提供一个使用不变文化的示例 代替顺序比较是正确的选择吗?

只是为了澄清一下,我要问一下,因为我正在开发一个使用不变文化进行大量字符串比较的代码库。这些情况中有许多是指在机器对机器通信场景中执行的精确字符串匹配。因此,我想确保清楚了解正确选择字符串比较值的基本原理。

评论
  • o夏樱
    o夏樱 回复

    从细节看来,只要您的假设正确即可-您想查找名称为“ Bob”的特定用户。 “Bób”是不同的用户,不应匹配,即您实际上是在尝试匹配两个符号,而不是如何读取用户名。

    但是,如果您正在查找街道名称,则可能需要询问代码以使“ strasse”和“Straße”被视为相同,因为您正在进行语言匹配,即客户会否在其中读取这两件事?一样的方法。