字符串之间的区别.Compare and CultureInfo's CompareInfo

本文关键字:CompareInfo CultureInfo and 之间 区别 Compare 字符串 | 更新日期: 2023-09-27 18:13:32

我在尝试我的手系统。全球化在一个小的桌面应用程序。我有点困惑的额外控制CultureInfo.Compare()必须提供比使用String.Compare()方法和它的过载。

假设我有两个字符串

String s1 = "'u3057'u3093'u304B'u3093'u305b'u3093"; //some Japanese text in Unicode
String s2 = "'u30b7'u3043'u30ab'u30f3'u30bb'u30f3"; //Some Japanese text in Unicode
CultureInfo ci = new CultureInfo("ja-JP");

String.Compare有几个过载,目前我会使用

String.Compare(String strA, String strB, CultureInfo culture, CompareOptions options)

(其中CompareOptions是枚举类型)

但是,我也可以使用:

CompareInfo compareInfo = CompareInfo.GetCompareInfo("ja-JP");
compareInfo.Compare(String strA, String strB, CompareOptions options);

CultureInfo的CompareInfo对象如何在处理全球化中的这种情况时提供更多的控制,例如:CompareOptions的日文文本。IgnoreKanaType(其中假名是日语的第二种形式,可以使用CompareOptions枚举类型从字符串中忽略)

字符串之间的区别.Compare and CultureInfo's CompareInfo

我相信String.Compare将简单地委托给它提供的CompareInfo -这只是更方便,而不必自己获得CompareInfo

考虑到它们做同样的事情,我不确定你最后的问题到底是什么意思。

是的,Jon skeet是对的,String。比较内部调用CultureInfo。方法,下面是来自IL的实际代码:

    public static int Compare(string strA, string strB, CultureInfo culture, CompareOptions options)
{
    if (culture == null)
    {
        throw new ArgumentNullException("culture");
    }
    return culture.CompareInfo.Compare(strA, strB, options);
}

这里要注意的另一件事是CultureInfo。Compare方法在内部并不(一开始)检查输入(区域性)是否为空。它只是直接做其他操作。如果使用了OrdinalIgnoreCase,它也会再次调用string. compare (string,string,StringOptions) API。所以最好使用String。