1

これを読んだ後、私はまだ混乱しています:

 string s1 = "hello";
 string s2 = "héllo";

ここでの違いはアクセント/文化です。

次のコードの結果はですFalse

Console.WriteLine(s1.Equals(s2, StringComparison.InvariantCulture));

しかし、私は不変の文化を使用しているので、éをeとして扱う必要があります(デフォルトは英語です、いいえ?)

ずっと使わないといけないようです

String.Compare(String, String, CultureInfo, CompareOptions) 

お気に入り

  string.Compare(s1, s2, CultureInfo.CurrentCulture, CompareOptions.IgnoreNonSpace) //true

しかし、私の現在の文化はhe-ILそうなので、なぜそれが機能しているのかわかりません。

それで :

  • CompareOptions使用したのにいつ動作しなかったのかわかりませんStringComparison.InvariantCulturemsdnページを参照しないでください。すでに読んでいて説明がよくわかりません) 。

  • 簡単に言えば、各オーバーロードはいつ使用する必要がありますか?

  • ノンスペースの結合文字は文化的なものではありませんか?

4

1 に答える 1

2

との混乱InvariantCultureはかなり一般的です。これの最適な,使用法は、ファイルとの間でデータを永続化し、特定のカルチャの奇妙な点(小数点記号や「u」の付いたスペルフレーバーなど)を気にしない場合です。

特に文化固有の動作が必要な場合は、比較での使用が制限されます。額面では明らかではないように思われるかもしれませんが、アキュートアクセントのあるeをアキュートアクセントのないeと同じであると比較すると、状況によって異なります。

あはは!あなたが言う状況に依存します。

文化固有の過負荷の仕事のように見えます。使用している文化を知っているときはいつでも、その文化を伝える必要があります。

この場合、.Netで発音区別符号(例:アクセントaiguCompareOptions )を無視する必要があるため、 (特に前述のように)受け入れるオーバーロードも使用する必要がありますCompareOptions.IgnoreNonSpace

于 2013-01-11T19:40:28.800 に答える