![](/img/trans.png)
[英]Overriding Equals and GetHashCode doesn't necessarily override equality overloading operator
[英]C# operator overloading == and pragma warnings 660 & 661 not overriding Equals and GetHashCode when irrelevant
為什么C#編譯器會抱怨pragma警告660和661
添加其他運算符時,例如:
public static bool operator ==(FooClass foo, string fooId)
我沒有具體說明
public static bool operator ==(FooClass foo, FooClass foo2)
這有意義覆蓋Object.Equals和GetHashCode。
這只是編譯器中的一個限制,它沒有正確檢查運算符中指定的參數嗎?
一般准則是foo == bar
應該返回與foo.Equals(bar)
相同的結果,這就是警告的原因。 這是一個指導原則,而不是一項要求,這就是為什么它是警告而不是錯誤。
第二個警告是因為if(foo.Equals(bar)) foo.GetHashCode() == bar.GetHashCode()
。 如果兩個對象相等,則它們的哈希碼也應該相等。 .NET框架和第三方庫中的許多東西都依賴於此,所以如果你不這樣做,像Dictionary
這樣使用GetHashCode()
進行查找的東西就會破壞。
所以如果我能做到的話
FooClass foo = new FooClass("Foo");
if(foo == "Foo")
{
//...
}
我希望能夠做到
FooClass foo = new FooClass("Foo");
Hashtable hash = new Hashtable();
hash.Add(foo, "Bar");
var result = hash["Foo"];
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.