カルチャを認識しない文字列比較の実行
更新 : 2007 年 11 月
既定では、Compare メソッドはカルチャを認識し、大文字と小文字を区別する比較を実行します。ただし、String.Compare メソッドのオーバーロードによって、culture パラメータを指定して、使用するカルチャを指定できます。アプリケーション コードでは、文字列比較でカルチャを認識するか、認識しないかを明確に示す必要があります。カルチャに依存する操作の場合は、culture パラメータとして CultureInfo.CurrentCulture プロパティを指定します。カルチャに依存しない操作の場合は、culture パラメータとして CultureInfo.InvariantCulture プロパティを指定します。
セキュリティに関する決定が文字列の比較操作の結果に基づいて行われる場合は、この操作がカルチャに依存しないようにして、操作の結果が CultureInfo.CurrentCulture の値により影響されないようにする必要があります。カルチャに依存した文字列の比較により矛盾した結果がどのように生成されるかを示す例については、「カスタムの大文字と小文字の対応規則および並べ替え規則」を参照してください。
String.CompareTo メソッドのオーバーロードは、既定ではカルチャに依存した比較および大文字と小文字を区別する比較を実行します。ただし、このメソッドのオーバーロードには、カルチャを認識しない比較を指定できるオーバーロードは用意されていません。コードを理解しやすくするために、String.Compare メソッドの方を使用し、カルチャに依存する操作には CultureInfo.CurrentCulture を指定し、カルチャに依存しない操作には CultureInfo.InvariantCulture を指定することをお勧めします。
String.Compare メソッドの使用
String.Compare メソッドを使用して、string1 と string2 の大文字と小文字を区別し、カルチャを認識する比較を実行する方法を次のコードに示します。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 メソッドを使用してカルチャを認識する比較の実行方法を示すコード例については、「固有カルチャのデータの比較と並べ替え」を参照してください。
この操作でカルチャを認識しないようにするには、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 メソッドを使用して、string1 と string2 の比較を実行する例を次に示します。既定では、カルチャを認識し、大文字と小文字を区別する比較が実行されます。
Dim compareResult As Integer = string1.CompareTo(string2)
int compareResult = string1.CompareTo(string2);
このコードは、culture パラメータが明示的に渡されていないため、意味が不明確になっています。アプリケーションでは、カルチャに依存するかどうかを明確に示すために、String.CompareTo メソッドを String.Compare メソッドに置き換えてください。string1 と string2 について大文字と小文字を区別するカルチャに依存した比較を実行する場合は、アプリケーションで culture パラメータとして CultureInfo.InvariantCulture を渡す必要があります。これにより、次の例に示すように、CurrentCulture に大文字と小文字の対応規則および並べ替え規則が適用されます。
Dim compareResult As Integer = String.Compare(string1, string2, False, CultureInfo.CurrentCulture)
int compareResult = String.Compare(string1, string2, false, CultureInfo.CurrentCulture);
string1 と string2 について大文字と小文字を区別するカルチャに依存しない比較を実行する場合は、アプリケーションで 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 メソッドの使用」を参照してください。