2011-11-18 4 views
6

文字列を==と比較するのがよい方法ですか? Compares1 == s2に相当し、のEqualsの方法に相当するものがありますか?これらのメソッドを使用する場合は、CultureInfo FxCopを指定しないと警告が出ますが、それは本当の問題ですか?C#の文字列を '=='と比較することをお勧めしますか?

+0

どのような比較をしたいですか? –

+1

あなたは何を比較しているかによって異なります - msdnはこれに最適です。http://msdn.microsoft.com/en-us/library/cc165449aspx – JonH

+1

このページは良い解説をしています:http://www.dotnetperls.com/string-equals – keyboardP

答えて

14

==オペレータは、文化的に認識されない順序の比較文字列です。それは.Equalsと同じ内部呼び出しを使用し、 "通常の"文字列比較のものには問題ありません。

あなたはドイツのダブルSまたはSSのような文化を意識しcomparingsを(例えばGUIの目的のために)、必要がある場合は、文字列を比較するとき、あなたはどのような種類を明示的に指定する方法を使用する必要があります

CultureInfo ci = new CultureInfo("de-DE"); 
String.Compare("Strasse", "Straße", true, ci) 
1

はい、その練習は問題ありません。 String.Compareを使用して、Best Pratices for Using Strings in the .NET Frameworkにある比較のベストプラクティスを使用することもできます。

はい、FxCopは警告を表示しますが、警告は警告です。あなたが文化を気にしないならば、それを無視することは安全です。しかし、実際の生活の警告のように、それは時々それらに注意を払う。

2

を使用あなたが実行しようとしている比較の。これにより、コードはずっとメンテナンスと読み込みが容易になります。可能な限り、StringComparison列挙型パラメータを受け取るSystem.StringおよびSystem.Arrayクラスのメソッドのオーバーロードを使用して、実行する比較の種類を指定できるようにします。文字列を比較するときは、==演算子と!=演算子を使用しないでください。また、String.CompareToインスタンスメソッドの使用は避けてください。オーバーロードのいずれもStringComparisonを使用しないためです。

ニーズに応じて、次の方法で使用することができます。

bool result = root.Equals(root2, StringComparison.Ordinal); 
result = root.Equals(root2, StringComparison.OrdinalIgnoreCase); 
bool areEqual = String.Equals(root, root2, StringComparison.Ordinal); 

ソースをこの答え:http://msdn.microsoft.com/en-us/library/cc165449.aspx

2

について文化を語るMSDN上extensivedocumentationあり-sensitive文字列の比較。 序文比較は言語学を気にせず、デフォルトで大文字と小文字を区別します。 文化に敏感なの比較は、言語学(ケース、パンキュレーションなど)を気にします。

dotnetperlsのthis articleは、パフォーマンスの意味合いを掘り下げ、文字列比較の2つの方法(==およびequals)のILとベンチマークを表示します。

そして、最後に、このquestion==は厳密文字列の比較とローカライズされた文字列には適していないことを示しています。

1

文字列がnullまたは空(別名 "")の場合は、string.IsNullOrEmpty(...);を使用します。

それ以外の場合は、私の本や大部分のもので問題ありません。あなたのやり方によって異なります。

関連する問題