次の方法で共有


カルチャを認識しない文字列比較の実行

既定では、Compare メソッドはカルチャを認識し、大文字と小文字を区別する比較を実行します。ただし、String.Compare メソッドのオーバーロードによって、culture パラメータを指定して、使用するカルチャを指定できます。アプリケーション コードでは、文字列比較でカルチャを認識するか、認識しないかを明確に示す必要があります。カルチャを認識する操作の場合は、culture パラメータとして CultureInfo.CurrentCulture プロパティを指定します。カルチャを認識しない操作の場合は、culture パラメータとして CultureInfo.InvariantCulture プロパティを指定します。

セキュリティに関する決定が文字列の比較操作の結果に基づいて行われる場合は、この操作がカルチャに依存しないようにして、操作の結果が CultureInfo.CurrentCulture の値により影響されないようにする必要があります。カルチャに依存した文字列の比較により矛盾した結果がどのように生成されるかを示す例については、「カスタムの大文字と小文字の対応規則および並べ替え規則」を参照してください。

String.CompareTo メソッドのオーバーロードは、既定ではカルチャを認識し、大文字と小文字を区別する比較を実行します。ただし、このメソッドのオーバーロードには、カルチャを認識しない比較を指定できるオーバーロードは用意されていません。コードを理解しやすくするために、String.Compare メソッドの方を使用し、カルチャに依存する操作には CultureInfo.CurrentCulture を指定し、カルチャに依存しない操作には CultureInfo.InvariantCulture を指定することをお勧めします。

String.Compare メソッドの使用

String.Compare メソッドを使用して、string1string2 の大文字と小文字を区別し、カルチャを認識する比較を実行する方法を次のコードに示します。CultureInfo.CurrentCultureculture パラメータとして渡され、CurrentCulture の大文字と小文字の対応および並べ替え規則が使用されます。

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

String.Compare メソッドを使用してカルチャを認識する比較の実行方法を示すコード例については、「固有カルチャのデータの比較と並べ替え」を参照してください。

この操作でカルチャを認識しないようにするには、culture パラメータとして CultureInfo.InvariantCulture を指定する必要があります。このコード例を次に示します。

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.CompareTo メソッドを String.Compare メソッドに置き換える必要があります。大文字と小文字を区別し、カルチャを認識して string1string2 を比較する場合は、culture パラメータとして CultureInfo.CurrentCulture を渡します。この場合、CurrentCulture の大文字と小文字の対応規則および並べ替え規則が使用されます。このコード例を次に示します。

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

大文字と小文字を区別し、カルチャを認識せずに string1string2 を比較する場合は、culture パラメータとして CultureInfo.InvariantCulture を渡します。この場合、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

概念

固有カルチャのデータの比較と並べ替え

その他の技術情報

カルチャを認識しない文字列操作の実行