11

一部の言語 (C++ など) では、文字列比較に == などの演算子を使用できません。これは、文字列自体ではなく、文字列オブジェクトのアドレスを比較するためです。ただし、C# では == を使用して文字列を比較でき、実際には文字列の内容を比較します。しかし、そのような比較を処理する文字列関数もあるので、私の質問は次のとおりです。あなたはすべきですか?

与えられた 2 つの文字列:

string aa = "aa"; 
string bb = "bb";

次のように比較する必要があります。

bool areEqual = (aa == bb); 

または、次のように Equal 関数を使用する必要があります。

bool areEqual = aa.Equals(bb); 

とにかく技術的な違いはありますか?または、ベストプラクティスの合理的な議論は?

4

5 に答える 5

25

これは、演算子の実装です。

    public static bool operator == (String a, String b) {
       return String.Equals(a, b);
    }

これで眠りを失うことはありません。

于 2009-12-28T10:22:41.973 に答える
25

私は使用しません:

aa.Equals(bb)

おそらくnullにならないことを知ってい ない限り。私は使用するかもしれません:aa

string.Equals(aa,bb)

しかし、私は主に、特定のStringComparisonモード (不変、序数、大文字と小文字を区別しないなど) のいずれかを使用したいと考えていました。実装を使用することもできますStringComparerが、抽象化するのが少し簡単なので (たとえば、Dictionary<string, Foo>大文字と小文字を区別しない序数辞書に渡す場合)。一般的な用途では、

a == b

結構です。

于 2009-12-28T10:12:25.903 に答える
2

技術的な違いはありません(aaがnullでない限り)。自分に似合うものを使用してください。私の意見では、演算子のオーバーロードを使用すると、コードがより明確になります。

追加の引数が必要な場合(または将来必要になる可能性がある場合)に関数を使用します(CompareTo()のように)

于 2009-12-28T10:13:53.597 に答える
1

ベストプラクティスとしては、文字列の比較に常にEquals()関数を使用する傾向があります。これにより、他の誰かがあなたのコードを読んだときに、あなたが特に文字列を比較したいことが明確になります。

于 2009-12-28T10:17:49.813 に答える
-3

一般的に、==はポインタの等価性を示し、.equalsは属性が等しいかどうかをチェックします。だからあなたが

a = 'a';
b = 'a';
bool c = (a == b);
bool d = (a.Equals(b))

その場合、cはfalseを返し、dはtrueを返す必要があります。

于 2009-12-28T10:20:07.317 に答える