私はC#の文字列クラスの比較演算子のために実装されたコードを調べようとしました。何見つかったことは、このでした:私はそれが私にトリックを再生しているリフレクターであるかどうかわからないが、私は自分のクラスのために、この戦略を実行しようとしたとき、私は対等の間で無限ループを持っ文字列等価演算子== in c#
//THIS IS NOT WHAT I MEANT
public static bool Equals(object objA, object objB)
{
return ((objA == objB) || (((objA != null) && (objB != null)) && objA.Equals(objB)));
}
//THIS IS WHAT I SEE REALLY and the above is what I would expect to see
public static bool Equals(string a, string b)
{
return ((a == b) || (((a != null) && (b != null)) && EqualsHelper(a, b)));
}
public static bool operator ==(string a, string b)
{
return Equals(a, b);
}
とオーバーロードされた==演算子(期待通り)。文字列クラスで異なるがSTHであるか、それはStringクラスの一部であることが、Objectクラスに
static Equals(object o1, object o2)
方法を報告している私のリフレクターのですか?
:
==
演算子を使用していませんか?インスタンスメソッドなので、静的なEqualsメソッドと同じにすることはできません。あなたが提供したコードに基づいて、私は無限ループを見ません。インスタンスEqualsメソッドを表示できますか? – ken申し訳ありませんが、私はこの質問を更新しました。間違った定義を投稿しました... – Bober02
私のopnionの無限は、(a == b)がEquals(文字列a、文字列b)で呼び出されたときに発生します。 STATIC型のaとbは文字列なので、オーバーロードされた演算子==が呼び出されます。私の簡単な例でこれをチェックし、ここにsthがあるかどうかわかりません。 – Bober02