この質問はやや主観的です...
「私は、Equalsのような既製の演算子がより多くの処理アクションを実行すると想定する傾向があります。」
"いつ、なぜあなたは!を選択しますか?そして両方とも'従来の'=="
オブジェクトのインスタンスの一部としてのEquals
メソッドは、そのインスタンスが別のインスタンスと等しいかどうかをチェックするために使用されますが、==
and!=
演算子は静的であるため、どのオブジェクトインスタンスからもバインドされていません。代わりに、これらは2つの引数(通常は同じタイプ)を受け入れて比較する特別な静的メソッドのようなものです。
次の例を考えてみましょう。
public class CustomObject
{
int someValue, anotherValue;
public bool Equals(CustomObject obj)
{
return (this.someValue == obj.someValue && this.anotherValue == obj.anotherValue);
}
public static bool operator ==(CustomObject a, CustomObject b)
{
return a.Equals(b);
}
public static bool operator !=(CustomObject a, CustomObject b)
{
return !(a == b);
}
}
この例では、このメソッドを使用して、同じタイプの別のインスタンスに対するEquals
値の比較結果を生成します。CustomObjectCustomObject
の演算子は、パラメーターオブジェクトの1つを呼び出すだけで、他のオブジェクトに対して同等性チェックを実行します。演算子は単にを否定し、反対の結果を生成します。したがって、とにかく両方ともそのメソッドを呼び出すため、パフォーマンスのオーバーヘッドはそれほど大きくありません。==
Equals
!=
==
==
!=
Equals
ベストプラクティス:
条件が本質的にブール条件である場合、、、またはを使用する必要はありませんがEquals
、!=
ブール条件を無効にするために==
使用する必要があります。!
例えば:
if(IsPostBack) // this is good
if(IsPostBack == true) // this is unnecessary
if(!IsPostBack) // this is good
if(IsPostBack == false) // this is unnecessary
条件が本質的にブール値ではない場合、2つのブール値を比較している場合、列挙型、またはその他の値型を比較している場合は、またはを使用でき!=
ます==
。
例えば:
if(a == b) // this is good
if(a != b) // this is good
条件が本質的にブール値ではなく、比較しているオブジェクトに==
or!=
演算子が実装されていない場合は、を使用Equals
できます。ジェネリックオブジェクトのタイプパラメータで表されるオブジェクトに実装されているかはコンパイル時にわからないため、ジェネリックでのおよびの使用は禁止されていることに注意してください。!=
==
!=
==
例えば:
if(a.Equals(b)) //this is good
if(!a.Equals(b)) // this is good
if(a.Equals(b) == true) // this is unnecessary