重载==运算符为null

时间:2012-09-24 07:00:16

标签: c# .net null operator-overloading equals-operator

我有一个名为Message的类,它会重载这些运算符:

public static bool operator ==(Message left, Message right)
public static bool operator !=(Message left, Message right)

public static bool operator ==(Message left, string right)
public static bool operator !=(Message left, string right)

public static bool operator ==(string left, Message right)
public static bool operator !=(string left, Message right)

我希望==!=运算符继续比较StringMessage以外的类型的引用,但是,

var message = new Message();
var isNull = message == null;

给了我这个:

  

以下方法或属性之间的调用不明确:'Message.operator ==(Message,Message)'和'Message.operator ==(Message,string)'

我知道这是因为MessageString都是引用类型,它们都可以是null,但我希望能够使用== opreator检查是否消息为空。

我可以为空值重载==吗?我尝试将其重载为object,并在重载时调用object.ReferenceEquals(object, object),但这没有帮助。

1 个答案:

答案 0 :(得分:6)

operator ==(Message left, object right)提供实现并检查right的类型,以查看它是否为空,字符串或消息。

或者,为Message定义一个带字符串的隐式构造函数。有关示例,请参阅Operator overloading and different types