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