15

このページでは、コメント投稿者は次のように書いています。

.ToUpper文字列の比較で大文字と小文字が区別されないことを保証するために 使用しないでください。

これの代わりに:

type.Name.ToUpper() == (controllerName.ToUpper() + "Controller".ToUpper())) 

これを行う:

type.Name.Equals(controllerName + "Controller", 
     StringComparison.InvariantCultureIgnoreCase)

なぜこの方法が好まれるのですか?

4

2 に答える 2

18

ここに詳細な答えがあります..トルコテスト(セクション3を読んでください)

多くの人々が議論しているように、トルコ語の「私」はほとんどの言語とは異なる振る舞いをします。Unicode標準では、小文字の「i」は大文字に移動すると「İ」(U + 0130「ラテン大文字Iとドット付き」)になります。同様に、大文字の「I」は、小文字に移動すると「ı」(U + 0131「ラテン小文字ドット付きI」)になります。

修正:繰り返しますが、文化に基づいた言語比較が絶対に必要な場合を除いて、比較には序数(生バイト)の比較器または不変の文化を使用します(トルコでは大文字のIがドットで示されます)

また、Microsoftによると、不変条件を使用するのではなく、序数を使用する必要があります...(Microsoft .NET 2.0で文字列を使用するための新しい推奨事項

于 2010-02-13T04:37:55.843 に答える
8

つまり、CLRによって最適化されます(メモリも少なくなります)。

さらに、そのわずかなパフォーマンスが重要な場合、大文字の比較はToLower()よりも最適化されます。

あなたの例に応えて、まだもっと速い方法があります:

String.Equals(type.Name, controllerName + "Controller", 
              StringComparison.InvariantCultureIgnoreCase);
于 2010-02-13T04:32:12.160 に答える