有没有办法在类上做到这一点,并仍然保留检测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