字符串之间的区别.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枚举类型从字符串中忽略)
我相信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。