5

使用する理由は何でしょうか-

bool result = String.Compare(fieldStr, "PIN", true).Equals(0);  

それ以外の、

bool result = String.Equals(fieldStr, "PIN", StringComparison.CurrentCultureIgnoreCase);

または、さらに簡単に -

bool result = fieldStr.Equals("PIN", StringComparison.CurrentCultureIgnoreCase);

NET の 2 つの文字列を C# と比較するには?

私は、単純な等値比較のために最初のコードベースの使用を放棄した大規模なコードベースのプロジェクトに割り当てられました。私は(まだ)それらの上級者がそのアプローチを使用した理由を見つけることができませんでした.2番目または3番目のような単純なものではありません. Equals(静的またはインスタンス) メソッドにパフォーマンス上の問題はありますか? String.Compareまたは、含意の余分な操作の処理を上回るメソッドを使用することには、特定の利点があり.Equals(0)ますか?

4

1 に答える 1

6

すぐに例を挙げることはできませんが、最初の例では が返さtrueれ、2 番目では が返される場合があると思いfalseます。2 つの値は、大文字と小文字を区別しない規則の下でも区別されますが、並べ替え順序に関しては同じである可能性があります。たとえば、ある文化では、並べ替え中にアクセントを重要なものとして扱わないことを決定しても、アクセント付きの文字だけが異なる 2 つの文字列を等しくないと見なす場合があります。(または、その逆の可能性もあります。つまり、2 つの文字列は等しいと見なされますが、論理的には一方が他方よりも前になります。)

基本的に、平等ではなく並べ替え順序に関心がある場合Compareは、使用が理にかなっています。また、コードが変換される場合 (たとえば LINQ 用)、および のオーバーロードCompareはサポートされているが、 のオーバーロードはサポートされていEqualsない場合にも意味がある可能性があります。

それらが異なる例を考え出そうとします。確かに珍しいと言えます。EDIT:これまでのところ、アクセント、Eszet、トルコ語の「I」の処理、およびさまざまな種類のスペースを試してみましたが、うまくいきませんでした。しかし、それが起こりえないと言うにはほど遠いです。

于 2013-06-26T05:44:43.010 に答える