我在C#中編程Unity並且真的很煩人的問題 - 我想定義特殊的Pair類,它具有以下關係:警告:對象定義了運算符==或運算符!=但不覆蓋Object.Equals(對象o)
public class Pair<T1>{
public int First;
public T1 Second;
public bool Equals(Pair<T1> b){
return First == b.First;
}
public static bool operator==(Pair<T1> a, Pair<T1> b){
return a.First == b.First;
}
public static bool operator!=(Pair<T1> a, Pair<T1> b){
return a.First != b.First;
}
}
這給了我以下警告:
警告CS0660: '對' 定義operator ==或operator =但並沒有 覆蓋的Object.Equals(對象o)(CS0660)(總成 - ! CSharp)
但也當我產生Pair
類型與相同的第一個整數的兩個對象時,它們的==
運算符返回True
(如我所願)。當我只聲明Equals函數時,同樣==
運算符返回值False
(我知道Unity以某種方式比較它們在內存中的收件人),而沒有警告。是否有任何方法可以避免警告,並仍然得到True
值==
運算符?
一旦你實現''==和'='它建議運營商也覆蓋'Equals'和'GetHashCode'與自定義實現。這就是警告的內容。最常見的'=='和'!='實現調用「Equals」方法,而不是實際具有任何邏輯。 – MarcinJuraszek