2011-11-05 192 views
1

我正在嘗試在小型桌面應用程序中使用System.Gloablization。我對使用String.Compare()方法及其重載的附加控制CultureInfo.Compare()必須提供一點困惑。String.Compare和CultureInfo的CompareInfo之間的區別

比方說,我有兩個字符串

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(其中Kana是日語的第二種形式,可以使用CompareOptions的enumaerated類型從字符串中忽略) 。

回答

0

是喬恩斯基特是正確的,String.Compare內部調用CultureInfo.Compare方法,這裏是從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.Compare,因爲在任何操作完成之前都有一個空檢查。

1

我相信String.Compare將簡單地委託給它提供的CompareInfo - 它只是更方便您不必自己掌握CompareInfo

鑑於他們做同樣的事情,我不知道你最終的問題是什麼意思。

相關問題