c# - 不区分大小写的 StringComparisons 之间的区别?

标签 c# case-insensitive string-comparison

<分区>

Possible Duplicate:
Which is generally best to use — StringComparison.OrdinalIgnoreCase or StringComparison.InvariantCultureIgnoreCase?

当使用 String.Equals(string a, string b, StringComparison comparisonType) 并且不关心 'a' 和 'b' 的大小写时,使用什么才是正确的 StringComparison? 换句话说,StringComparison.CurrentCultureIgnoreCase、StringComparison.InvariantCultureIgnoreCase 和 StringComparison.OrdinalIgnoreCase 之间有什么区别,每一个将如何影响 String.Equals 的使用?

最佳答案

问题是小写字母的大写版本在所有语言中都不相同。例如,“u”的大写在 en-us 中是“U”,但在其他文化中可能是其他东西。

试试这个,例如:

        CultureInfo english = new CultureInfo("en-US", false);
        CultureInfo turkish = new CultureInfo("tr-TR", false);

        foreach (String i in new String[] { "a", "e", "i", "o", "u" })
        {
            String iEng = i.ToUpper(english);
            String iTur = i.ToUpper(turkish);
            Console.Write(i); 
            Console.WriteLine(iEng == iTur ? " Equal" : " Not equal");
        }

        Console.ReadLine();

因此,如果您在当前线程的文化中输入了包含此类字母的字符串,则使用不变文化可能会产生错误的结果。所以我会使用 CurrentCultureIgnoreCase,如果您确定比较的字符串是在当前区域性中输入的并且也应该以这种方式进行比较。

关于c# - 不区分大小写的 StringComparisons 之间的区别?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/983405/

相关文章:

c# - Nuget 安装 System.Data.Sqlite 时出现脚本错误

c# - Fluent NHibernate - 应用自定义类型的约定

regex - Laravel 不区分大小写的路由

LINQ to DataSet 不区分大小写的分组依据

powershell - 使用 PowerShell 匹配存储在变量中的字符串

c# - 如何使用字符串作为索引?

c# - 如何从 C# 调用带有 int& 和 int* 参数的 C++ dll 函数?

c# - 为什么我不能在 C# 中定义不区分大小写的字典?

java - 复杂的字符串匹配

java - 字符串池的意外行为