次の方法で共有


カルチャに依存しない大文字と小文字を区別しない変更を実行する

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

多くの場合、文字列は後で簡単に検索できるように標準ケースに変換されます。 この方法で文字列を使用する場合は、CultureInfo.InvariantCulture パラメーターにcultureを指定する必要があります。Thread.CurrentCultureの値は、ケースが変更されてから検索が行われる時刻の間で変更される可能性があるためです。

セキュリティ上の決定がケース変更操作に基づいている場合、結果が CultureInfo.CurrentCultureの値の影響を受けないように、操作はカルチャに依存しないようにする必要があります。 カルチャに依存する文字列操作が一貫性のない結果を生成する方法を示す例については、「 文字列を使用するためのベスト プラクティス 」の「現在のカルチャを使用する文字列比較」セクションを参照してください。

String.ToUpper と String.ToLower

コードをわかりやすくするために、カルチャを明示的に指定できる 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メソッドと同じ特性を持っていますが、影響を受けるのはトルコ語 (Türkiye) とアゼルバイジャン語 (ラテン、アゼルバイジャン) だけです。 これらは、1文字の大文字と小文字の違いを持つ唯一の2つの文化です。 この一意のケース マッピングの詳細については、 String クラスのドキュメントの「大文字と小文字の区別」セクションを参照してください。 コードをわかりやすくし、結果の一貫性を確保するために、 CultureInfo パラメーターを受け入れるこれらのメソッドのオーバーロードを常に使用することをお勧めします。

こちらも参照ください