为null值重载==运算符

5

我有一个名为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,但我想使用==运算符来检查消息是否为null

我能否为null值重载==? 我尝试为object重载它并在重载中调用object.ReferenceEquals(object, object),但这没有帮助。


3
如果你想这样做(我不建议这样做),你将需要将 null 强制转换为适用的类型之一。message == (string)null; 或者 message == (Message)null; 应该可以工作。 - verdesmarald
@verdesmarald:是的,那个方法可以用,但我希望找到一种直接使用它的方法。你有什么建议吗? - Şafak Gür
据我所知,如果您想要拥有多个 operator==,则不能这样做。 - verdesmarald
http://msdn.microsoft.com/en-us/library/1t3y8s4s(v=vs.80).aspx - Bakudan
1个回答

6
operator ==(Message left, object right) 提供一个实现,并检查 right 的类型,以确定它是否为 null、字符串或 Message。
或者,为 Message 定义一个隐式构造函数,该构造函数需要一个字符串作为参数。参见 Operator overloading and different types,其中有一个示例。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接