我有下面的代碼「!=」:使用比較操作符,比如和「==」,在C#中的限制爲值仿製藥
class Foo<T> where T : struct
{
private T t;
[...]
public bool Equals(T t) { return this.t == t; }
}
當我嘗試編譯,它給了我下面的錯誤:
Operator '==' cannot be applied to operands of type 'T' and 'T'
爲什麼不能這樣做?如果約束是where T : class
它會起作用。但我需要它是值類型的,因爲在我的實現中,這個泛型將永遠是一個枚舉。
我在做什麼來避免這種情況是使用Object.Equals()
方法。它會一直保證正確的行爲,因爲我只是比較T?
這是在我的時區有點晚了。明天我會檢查其他答案並標記已接受的答案。謝謝大家! – 2010-03-04 10:48:07
請記住,您可以使用'ReferenceEquals'來檢查引用是否相等,這就是'=='通常會做的事情(除非我錯了或者它已被覆蓋)。 – Svish 2010-03-04 11:00:40
@Svish - 當傳遞值類型時,'ReferenceEquals'總是返回'false',這就是'T'被限制在這裏的原因。 – 2010-03-04 14:33:02