2012-09-24 39 views
5

tengo una clase llamada Message que sobrecarga estos operadores:== operador de nula

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) 

Quiero que el == y != operadores a mantener comparando las referencias de los tipos distintos de String y Message pero,

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

me da esto:

La llamada es ambigua entre los métodos o propiedades siguientes: 'Message.operator == (Mensaje, Mensaje)' y 'Message.operator == (Mensaje, String)'

Sé que es debido a que tanto Message y String son tipos de referencia y ambos pueden ser null, pero quiero poder utilizar == opreator para comprobar si el mensaje es nulo.

¿Puedo sobrecargar == para valores nulos? Traté de sobrecargarlo para object y llamar al object.ReferenceEquals(object, object) en la sobrecarga, pero eso no ayudó.

+3

Si quieres hacerlo de esta manera (que no recomiendo), deberás convertir 'null' a uno de los tipos aplicables. 'message == (string) null;' o 'message == (Message) null;' debería funcionar. – verdesmarald

+0

@verdesmarald: Sí, funciona, pero esperaba encontrar una forma de usarlo directamente. ¿Qué recomiendas por cierto? –

+0

No, hasta donde yo sé, no puedes hacer eso si quieres tener 'operator ==' s. – verdesmarald

Respuesta

6

Proporcione una implementación para operator ==(Message left, object right) y compruebe el tipo de right para ver si es nulo, una cadena o un mensaje.

O bien, defina un constructor implícito para el Mensaje que toma una cadena. Ver Operator overloading and different types para un ejemplo.