次の方法で共有


カルチャを認識しない大文字と小文字の変更の実行

更新 : 2007 年 11 月

String.ToUpperString.ToLowerChar.ToUpperChar.ToLower の各メソッドには、パラメータを受け取らないオーバーロードが用意されています。既定では、パラメータを使用しないこれらのオーバーロードは、CultureInfo.CurrentCulture の値に基づいて大文字と小文字の変更を実行します。このため、大文字と小文字を区別する結果がカルチャによって異なる場合があります。大文字と小文字の変更でカルチャを認識するかどうかを明確にするには、culture パラメータを明示的に指定する必要があるこれらのメソッドのオーバーロードを使用する必要があります。大文字と小文字の変更でカルチャを認識する場合は、culture パラメータとして CultureInfo.CurrentCulture を指定します。大文字と小文字の変更でカルチャを認識しない場合は、culture パラメータとして CultureInfo.InvariantCulture を指定します。

後で検索しやすいように文字列の大文字と小文字を変換する場合があります。文字列をこのように使用する場合は、culture パラメータとして CultureInfo.InvariantCulture を指定する必要があります。Thread.CurrentCulture の値が、大文字と小文字を変更してから検索が実行されるまでの間に変更される可能性があるからです。

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

String.ToUpper メソッドと String.ToLower メソッドの使用

コードをわかりやすくするために、culture パラメータを明示的に指定できる String.ToUpper メソッドと String.ToLower メソッドのオーバーロードを常に使用することをお勧めします。識別子の検索を実行するコード例を次に示します。key.ToLower 操作は既定ではカルチャを認識しますが、この動作はコードを見ても明確ではありません。

Shared Function LookupKey(key As String) As Object
   Return internalHashtable(key.ToLower())
End Function
static object LookupKey(string key) 
{
    return internalHashtable[key.ToLower()];
}

key.ToLower 操作でカルチャを認識しない場合は、前の例を次のように変更して、大文字と小文字を変更するときに明示的に CultureInfo.InvariantCulture を使用します。

Shared Function LookupKey(key As String) As Object
    Return internalHashtable(key.ToLower(CultureInfo.InvariantCulture))
End Function
static object LookupKey(string key) 
{
    return internalHashtable[key.ToLower(CultureInfo.InvariantCulture)];
}

Char.ToUpper メソッドと Char.ToLower メソッドの使用

Char.ToUpper メソッドと Char.ToLower メソッドは String.ToUpper メソッドおよび String.ToLower メソッドと同じ特性を持っていますが、影響を受けるカルチャは "tr-TR" (トルコのトルコ語) および "az-Latn-AZ" (アゼルバイジャンのアゼリ語 (ラテン)) だけです。単一の文字の大文字と小文字の区別が異なるのは、この 2 つのカルチャだけです。これらのカルチャに固有の大文字と小文字の対応の詳細については、「カスタムの大文字と小文字の対応規則および並べ替え規則」を参照してください。コードをわかりやすくし、結果の一貫性を保証するために、culture パラメータを明示的に指定できるこれらのメソッドのオーバーロードを常に使用することをお勧めします。

参照

参照

String.ToUpper

String.ToLower

Char.ToUpper

Char.ToLower

その他の技術情報

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