由于 Microsoft 最了解的原因,IPAddress.Parse("0.0.0.0")
当您要求进行对象级比较时,该框架使用它们的 objectID 而不是它们的值进行评估。也就是说,您要问的是两者是否是同一个对象(即指向存储值的内部指针)而不是同一个值。
但是,您可以使用以下方法执行您想要的操作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
应该始终进行基于值的比较,所以你们都很好。