4

重複の可能性:
== または .Equals()

文字列配列があり、配列内の分割された文字列項目の数を数えたいだけです。

しかし、どのバージョンが必要であるか、どのバージョンを使用する必要があるかを判断できません。

if(myStringArray.Count.Equals(47))
{
   // Do something.
}

また

if(myStringArray.Count == 47)
{
   // Do something.
}

2つのアプローチの違いと、両方が存在する理由を理解するのを手伝ってもらえますか?

私は両方を試しましたが、どちらも同じ結果になります。

4

3 に答える 3

6

このEqualsメソッドは、オブジェクト タイプが 2 つのインスタンス間の「同等性」を定義する手段を提供します。数値ではEquals==は同じものですが、オブジェクト型を使用している場合は異なります。等しいEqualsかどうかを比較し(2 つのオブジェクトが互いに同等である)、同一性を比較します (同じオブジェクトへの 2 つの参照です)。クラスの作成者は、クラスに応じて、オーバーライドし、(通常) オブジェクトのすべてのフィールドを他のオブジェクトのフィールドと比較するか、キーフィールドを比較します。==Equals

于 2012-06-02T07:53:16.417 に答える
1

構造体の場合、ここで使われている整数のように違いはありません。クラスにはあるかもしれません。

int、bool、datetime などの構造体の場合、固有値は参照ではなく == と比較されます。for classes == は参照を比較しますが、equals をオーバーライドしてカスタム比較を適用できます。たとえば、クラス Foo が主キーを含むクラスであり、キーを比較するためにその base equals 実装をオーバーライドした場合:

 var foo1 = new Foo{PrimaryKey = 5};
 var foo2 = new Foo{PrimaryKey = 5};
 foo1 == foo2 //false
 foo1.Equals(foo2) //true
于 2012-06-02T07:55:33.297 に答える
0

誰かが2つのアプローチの違いを理解するのを手伝ってくれませんか

機能に違いはありませんが、2 番目の方が読みやすく理解しやすいため、推奨されます。

そして、なぜ両方が存在するのですか?

C# ではSystem.Int32は構造体なので、Equals(Object)からメソッドを継承していSystem.Objectます。.NET 開発者Equals(Int32)は、同じ構文で代替手段を提供するメソッドも追加しました。読みやすいEquals(Int32)という理由だけで、本番コードで使用されているのを見たことがありません。==

于 2012-06-02T07:52:18.207 に答える