2012-09-24 112 views
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.operator ==(消息,字符串)”

我知道这是因为这两个MessageString是引用类型,他们都可以null,但我希望能够使用== opreator检查邮件是否为空。

我可以重载==为空值?我试图重载它object,并呼吁在过载object.ReferenceEquals(object, object)但没有帮助。

+3

如果你wan't做这样(我不推荐),你将不得不投'null'适用的类型之一。 'message ==(string)null;'或'message ==(Message)null;'应该工作。 – verdesmarald

+0

@verdesmarald:是的,这有效,但我希望找到直接使用它的方法。你推荐什么顺便说一句? –

+0

不,据我所知,如果你想有多个'operator ==',你不能这么做。 – verdesmarald

回答

6

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

可替换地,限定用于消息接收字符串的隐式构造。一个例子见Operator overloading and different types