我有一个名为 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)
我希望 ==
和 !=
运算符继续比较 String
和 Message
以外的类型的引用> 但是,
var message = new Message();
var isNull = message == null;
给我这个:
The call is ambiguous between the following methods or properties: 'Message.operator ==(Message, Message)' and 'Message.operator ==(Message, string)'
我知道是因为Message
和String
都是引用类型,它们都可以是null
,但是我希望能够使用==
运算符,用于检查消息是否为空。
我可以为空值重载 ==
吗?我尝试为 object
重载它并在重载中调用 object.ReferenceEquals(object, object)
但这没有帮助。
最佳答案
为operator ==(Message left, object right)
提供一个实现,并检查right
的类型,看它是null、字符串还是Message。
或者,为采用字符串的 Message 定义一个隐式构造函数。参见 Operator overloading and different types举个例子。
关于c# - 为 null 重载 == 运算符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/12560253/