有沒有辦法在類上做到這一點,並仍然保留檢測Type變量是否爲null的能力?我可以爲結構體做這些事情(因爲結構體不能用null結構,而不是將x與null進行比較,所以使用單獨的方法caleld IsNull或HasValue ...但是不能將該技術與一流的事業,當類變量爲空,當然,你不能要求它這樣一個實例方法在類上覆蓋==和!=
public class myClass: IEquatable<myClass>
{
public int IntValue { get; set; }
public static bool operator ==(myClass cA, myClass cB)
{ return cA is myClass && cB is myClass && cB.Equals(cA); }
public static bool operator !=(myClass cA, myClass cB)
{ return !(cA == cB); }
public override bool Equals(object o)
{ return o is myClass && this == (myClass)o; }
public override bool Equals(myClass o)
{ return IntValue == o.IntValue; }
}
但是當我去!
myClass x;
if (x != null) // this returns false when it should be true
{
//code to execute with x here
}
對於它的價值,唯一的我希望這是一個類的原因是因爲它參與了一個簡單的繼承關係,這是一個不可變的類,實際上我在這裏要做的是編碼它,因此它可以表現得像一個不可變的第二類可空,酷似一個不可改變的,可空結構的行爲(如Nullable<int>
或Nullable<float>
等
只是在這裏大聲思考,但是當cA或cB爲空時,在您的超載中始終返回true的缺點是什麼? – 2011-02-25 14:45:07
在'公共靜態布爾運算符==(myClass cA,myClass cB)'is'操作符調用{return cA myClass && cB is myClass && cB.Equals(cA); ''不需要。 – 2011-02-25 14:46:07