Microsoftに最もよく知られている理由により、フレームワークはIPAddress.Parse("0.0.0.0")
、オブジェクトレベルの比較を要求するときに、値ではなくobjectIDを使用して評価します。つまり、2つが同じ値ではなく、同じオブジェクト(つまり、格納された値への内部ポインタ)であるかどうかを尋ねています。
Equals()
ただし、次の方法を使用して、探していることを実行できます。
IPAddress ipMine = IPAddress.Parse("0.0.0.0");
IPAddress ipAny = IPAddress.Any;
Console.WriteLine(ipMine == ipAny); // will output false
Console.WriteLine(ipMine.Equals(ipAny)); // will output true
フレームワークに組み込まれている基本オブジェクト(int、float、stringなど)を適切なタイミングでプリミティブとして暗黙的に処理すると、ときどき台無しになります。複雑な型の場合、.NETはデフォルトで、それらを参照として処理することを常に覚えておく価値があります。作成者は、演算子メソッドを明示的に実装します。上記の場合、MSは、デフォルトの動作がrefによる比較である方が便利であると判断しましたが、Equals
常に値ベースの比較を行う必要があるため、すべて問題ありません。