1

考虑一个场景,您正在实现旨在用于机器对机器通信的代码。典型的例子是在 Web API 操作方法中执行的代码。

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

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

在这种情况下,我应该使用StringComparison.OrdinalorStringComparison.InvariantCulture吗?

根据我的理解,由于我想在两个字符串之间执行完全匹配,所以这里的正确选择是StringComparison.Ordinal.

两个字符串和之间的文化敏感比较的典型示例,其中两个字符串由于语言规则而被认为是相等的,似乎不适合这里。Straßestrasse

这个假设正确吗?

如果这是正确的,您能否提供一个示例,说明使用不变文化而不是序数比较是正确的选择?

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

4

1 回答 1

1

从提供的详细信息看来,您的假设是正确的 - 您想找到名称为“Bob”的特定用户。“Bób” 是不同的用户,不应该匹配,即您实际上是在尝试匹配两个符号,而不是用户名的读取方式。

但是,如果您正在查找街道名称,您可能想要求代码将“strasse”和“Straße”视为相同,因为您正在进行语言匹配,即客户是否会在一样的方法。

于 2020-05-11T11:35:51.450 回答