Avatar ·

InvariantCulture和Ordinal在C#字符串比较中有什么区别?

大家好!我是一名初学C#的开发者,遇到了字符串比较的问题。在Microsoft文档中,我经常看到两种方法:`String.Compare`配合`StringComparison.InvariantCulture`和`StringComparison.Ordinal`。但我不太明白它们之间的区别,以及何时应该使用哪一种。 例如,我有这样一段代码: ```csharp string str1 = "Straße"; string str2 = "STRASSE"; bool result1 = string.Equals(str1, str2, StringComparison.InvariantCultureIgnoreCase); bool result2 = string.Equals(str1, str2, StringComparison.OrdinalIgnoreCase); Console.WriteLine($"InvariantCulture: {result1}"); // True Console.WriteLine($"Ordinal: {result2}"); // False ``` 为什么使用`InvariantCulture`时字符串被视为相等,而使用`Ordinal`时却不相等?它们明明是不同的字符串!另外,如果我只是比较用户登录名或文件名,应该选择哪种方式?我听说`Ordinal`更快,但担心出错,导致不同语言环境下出现bug。