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

发布于 2024-07-23 22:42:23 字数 597 浏览 8 评论 0原文

可能的重复:
通常最好使用哪个 - StringComparison.OrdinalIgnoreCase 或 StringComparison .InvariantCultureIgnoreCase?

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

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

When using the String.Equals(string a, string b, StringComparison comparisonType) and not caring about the case of 'a' and 'b', what's the proper StringComparison to use?
In other words, what's the difference between StringComparison.CurrentCultureIgnoreCase, StringComparison.InvariantCultureIgnoreCase, and StringComparison.OrdinalIgnoreCase, and how will each one affect the use of String.Equals?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

亢潮 2024-07-30 22:42:23

问题是小写字母的大写版本在所有语言中都不相同。 例如,“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。

The thing is that uppercase versions of lowercase letters are not same in all languages. For example, uppercase of "u" is "U" in en-us, but it may be something else in some other culture.

Try this, for example:

        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();

So if you have strings entered in current thread's culture, containing such letters, using invariant culture might give wrong results. So I would use CurrentCultureIgnoreCase, if you are sure that the compared strings were entered in current culture and should be compared that way also.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文