回答:
現在のカルチャに応じて、ToLowerは、予期しないカルチャ固有の小文字を生成する場合があります。ınfo
代わりに、iにドットなしで生成して、info
文字列比較を汚すなど。そのため、言語固有でないデータではToLowerInvariantを使用する必要があります。ユーザーの母国語/文字セットである可能性のあるユーザー入力がある場合、通常はToLowerを使用する唯一の時間です。
この問題の例については、この質問を参照してください 。C#-ToLower()が文字「I」からドットを削除することがあります
これは便利だと思います:
http://msdn.microsoft.com/en-us/library/system.string.tolowerinvariant.aspx
更新
アプリケーションが、現在のカルチャの影響を受けない予測可能な方法で文字列が変化するケースに依存している場合は、ToLowerInvariantメソッドを使用します。ToLowerInvariantメソッドは、ToLower(CultureInfo.InvariantCulture)と同等です。このメソッドは、ユーザーインターフェイスコントロールで文字列のコレクションを予測可能な順序で表示する必要がある場合に推奨されます。
また
... ToLowerは、ほとんどの場所でToLowerInvariantと非常によく似ています。文書は、これらの方法がトルコの文化でのみ行動を変えるであろうことを示しています。また、Windowsシステムでは、ファイルシステムは大文字と小文字を区別しないため、使用がさらに制限されます...
http://www.dotnetperls.com/tolowerinvariant-toupperinvariant
hth
String.ToLower()
デフォルトのカルチャをString.ToLowerInvariant()
使用し、インバリアントカルチャを使用します。したがって、本質的には、不変カルチャと順序文字列比較の違いを尋ねています。
ToLower
バリアントの議論には関係ありません。序数と不変量は、2つの文字列の「ソート順」を変更するだけで、等価比較は変更しません。
TL; DR:
「コンテンツ」(記事、投稿、コメント、名前、場所など)を扱う場合は、を使用しますToLower()
。"リテラル"(コマンドライン引数、カスタム文法、列挙型である必要がある文字列など)を使用する場合ToLowerInvariant()
。
例:
= 使用ToLowerInvariant
誤った =
トルコ語でDIŞ
「外」をdiş
意味し、「歯」を意味します。の適切な下部ケーシングはDIŞ
ですdış
。したがって、ToLowerInvariant
誤って使用すると、トルコでタイプミスがある可能性があります。
= 誤った使い方ToLower
=
ここで、SQLパーサーを作成しているとしましょう。どこかに次のようなコードがあります:
if(operator.ToLower() == "like")
{
// Handle an SQL LIKE operator
}
カルチャを変更しても、SQL文法は変更されません。フランス人はのSÉLECTIONNEZ x DE books
代わりに書きませんSELECT X FROM books
。ただし、上記のコードが機能するためには、トルコ人が書く必要がありますSELECT x FROM books WHERE Author LİKE '%Adams%'
(大文字iの上にあるドットは、ほとんど見えません)。これはトルコのユーザーにとって非常にイライラするでしょう。