Bagikan melalui


Melakukan perbandingan string yang tidak sensitif terhadap budaya

Secara default, metode ini String.Compare melakukan perbandingan peka terhadap budaya dan peka huruf besar/kecil. Metode ini juga mencakup beberapa kelebihan beban yang menyediakan culture parameter yang memungkinkan Anda menentukan budaya yang akan digunakan, dan comparisonType parameter yang memungkinkan Anda menentukan aturan perbandingan yang akan digunakan. Memanggil metode ini alih-alih kelebihan beban default menghapus ambiguitas apa pun tentang aturan yang digunakan dalam panggilan metode tertentu, dan memperjelas apakah perbandingan tertentu peka terhadap budaya atau tidak peka terhadap budaya.

Catatan

Kedua kelebihan beban metode melakukan perbandingan String.CompareTo sensitif budaya dan peka huruf besar/kecil; Anda tidak dapat menggunakan metode ini untuk melakukan perbandingan yang tidak sensitif terhadap budaya. Untuk kejelasan kode, kami sarankan Anda menggunakan metode sebagai gantinya String.Compare .

Untuk operasi sensitif budaya, tentukan StringComparison.CurrentCulture nilai atau StringComparison.CurrentCultureIgnoreCase enumerasi sebagai comparisonType parameter . Jika Anda ingin melakukan perbandingan sensitif budaya menggunakan budaya yang ditunjuk selain budaya saat ini, tentukan CultureInfo objek yang mewakili budaya tersebut culture sebagai parameter.

Perbandingan string yang tidak sensitif terhadap budaya yang didukung oleh String.Compare metode ini adalah linguistik (berdasarkan konvensi penyortiran budaya invarian) atau non-linguistik (berdasarkan nilai ordinal karakter dalam string). Sebagian besar perbandingan string yang tidak sensitif terhadap budaya adalah non-linguistik. Untuk perbandingan ini, tentukan StringComparison.Ordinal nilai atau StringComparison.OrdinalIgnoreCase enumerasi sebagai comparisonType parameter . Misalnya, jika keputusan keamanan (seperti perbandingan nama pengguna atau kata sandi) didasarkan pada hasil perbandingan string, operasi harus tidak peka terhadap budaya dan non-linguistik untuk memastikan bahwa hasilnya tidak terpengaruh oleh konvensi budaya atau bahasa tertentu.

Gunakan perbandingan string linguistik yang tidak sensitif budaya jika Anda ingin menangani string yang relevan secara linguistik dari beberapa budaya dengan cara yang konsisten. Misalnya, jika aplikasi Anda menampilkan kata-kata yang menggunakan beberapa set karakter dalam kotak daftar, Anda mungkin ingin menampilkan kata-kata dalam urutan yang sama terlepas dari budaya saat ini. Untuk perbandingan linguistik yang tidak peka budaya, .NET mendefinisikan budaya invarian yang didasarkan pada konvensi linguistik bahasa Inggris. Untuk melakukan perbandingan linguistik yang tidak peka budaya, tentukan StringComparison.InvariantCulture atau StringComparison.InvariantCultureIgnoreCase sebagai comparisonType parameter .

Contoh berikut melakukan dua perbandingan string non-linguistik yang tidak peka budaya. Yang pertama peka huruf besar/kecil, tetapi yang kedua tidak.

using System;

public class CompareSample
{
    public static void Main()
    {
        string string1 = "file";
        string string2 = "FILE";
        int compareResult = 0;

        compareResult = String.Compare(string1, string2,
                                       StringComparison.Ordinal);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
                          StringComparison.Ordinal, string1, string2,
                          compareResult);

        compareResult = String.Compare(string1, string2,
                                       StringComparison.OrdinalIgnoreCase);
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
                          StringComparison.OrdinalIgnoreCase, string1, string2,
                          compareResult);
    }
}
// The example displays the following output:
//    Ordinal comparison of 'file' and 'FILE': 32
//    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0
Public Class CompareSample
    Public Shared Sub Main()
        Dim string1 As String = "file"
        Dim string2 As String = "FILE"
        Dim compareResult As Integer

        compareResult = String.Compare(string1, string2, _
                                       StringComparison.Ordinal)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
                          StringComparison.Ordinal, string1, string2,
                          compareResult)

        compareResult = String.Compare(string1, string2,
                                       StringComparison.OrdinalIgnoreCase)
        Console.WriteLine("{0} comparison of '{1}' and '{2}': {3}",
                          StringComparison.OrdinalIgnoreCase, string1, string2,
                          compareResult)
    End Sub
End Class
' The example displays the following output:
'    Ordinal comparison of 'file' and 'FILE': 32
'    OrdinalIgnoreCase comparison of 'file' and 'FILE': 0

Anda dapat mengunduh Tabel Berat Pengurutan, sekumpulan file teks yang berisi informasi tentang bobot karakter yang digunakan dalam operasi pengurutan dan perbandingan untuk sistem operasi Windows, dan Tabel Elemen Kolase Unicode Default, tabel berat urut untuk Linux dan macOS.

Lihat juga