執行不區分文化特性的字串比較

根據預設,Compare 方法會執行區分文化特性和區分大小寫的比較。然而,有提供 String.Compare 方法的多載,讓您可以經由提供 culture 參數指定要使用的文化特性。應用程式碼應該清楚顯示字串比較是要區分文化特性,或是不要區分文化特性。若要進行區分文化特性作業,請指定 CultureInfo.CurrentCulture 屬性做為 culture 參數。若要進行不區分文化特性作業,請指定 CultureInfo.InvariantCulture 屬性做為 culture 參數。

如果安全性決策必須依據字串比較的結果進行,則作業應該不區分文化特性,以確保結果不受 CultureInfo.CurrentCulture 的值影響。請參閱自訂大小寫對應和排序規則,其中的範例示範了區分文化特性的字串比較如何產生不一致的結果。

根據預設,String.CompareTo 方法的多載會執行區分文化特性和區分大小寫的比較。然而,這個方法沒有提供可以讓您指定不區分文化特性比較的多載。為了使程式碼更為明確,建議您改用 String.Compare 方法,指定 CultureInfo.CurrentCulture 用於區分文化特性的作業,或者指定 CultureInfo.InvariantCulture 用於不區分文化特性的作業。

使用 String.Compare 方法

下列幾行程式碼示範如何使用 String.Compare 方法來執行 string1string2 的區分大小寫和區分文化特性比較。CultureInfo.CurrentCulture 當做 culture 參數傳遞,表示會使用 CurrentCulture 的大小寫對應和排序規則。

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

如需示範如何使用 String.Compare 方法執行區分文化特性比較的完整程式碼範例,請參閱比較和排序特定文化特性的資料

若要讓此作業成為不區分文化特性,您必須指定 CultureInfo.InvariantCulture 做為 culture 參數。這點在下列幾行程式碼範例中作示範。

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

下列程式碼範例示範如何使用前面幾行程式碼來執行不區分文化特性的字串比較。

Imports System
Imports System.Globalization

Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        
        Dim compareResult As Integer = String.Compare(string1, string2, _
            False, CultureInfo.InvariantCulture)   
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is _
            {2}", string1, string2, compareResult)
    End Sub
End Class
using System;
using System.Globalization;

public class CompareSample
{
    public static void Main()
    {
        String string1 = "file";
        String string2 = "FILE";

        int compareResult = String.Compare(string1, string2, false, 
        CultureInfo.InvariantCulture);
        Console.WriteLine("A case-insensitive comparison of {0} and {1} is 
            {2}", string1, string2, compareResult);
    }
}

使用 String.CompareTo 方法

下列範例使用 String.CompareTo 方法來執行 string1string2 的比較。在預設情況下,比較作業會區分文化特性並區分大小寫。

Dim compareResult As Integer = string1.CompareTo(string2)
int compareResult = string1.CompareTo(string2);

由於 culture 參數並未用明確傳遞,因此上述範例的目的並不明顯;無論您要讓這項作業成為區分文化特性或是不區分文化特性,您都應該用 String.Compare 方法取代 String.CompareTo 方法,讓目的更加清楚。如果您想要執行 string1string2 的區分大小寫和區分文化特性比較,請將 CultureInfo.CurrentCulture 做為 culture 參數傳遞。這會導致 CurrentCulture 的大小寫對應和排序規則被使用。這點在下列範例中示範。

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);

如果您想要執行 string1string2 的區分大小寫和不區分文化特性比較,請將 CultureInfo.InvariantCulture 做為 culture 參數傳遞。這個會導致 InvariantCulture 的大小寫對應和排序規則被使用。這點在下列範例中示範。

Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.InvariantCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.InvariantCulture);

如需示範如何使用 String.Compare 方法取得不區分文化特性結果的完整程式碼範例,請參閱使用 String.Compare 方法。

請參閱

參考

String.Compare Method
String.CompareTo Method

概念

比較和排序特定文化特性的資料

其他資源

執行不區分文化特性的字串作業