2012-09-24 8 views
5

ho una classe chiamata Message sovraccaricando questi operatori:Sovraccarico == operatore per nulla

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) 

voglio operatori == e != mantengono confronto i riferimenti dei tipi diversi e StringMessage ma,

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

mi dà questo:

La chiamata è ambigua tra le seguenti metodi o proprietà: 'Message.operator == (Messaggio, Messaggio)' e 'Message.operator == (Messaggio, string)'

Lo so che è perché entrambi Message e String sono tipi di riferimento ed entrambi possono essere null, ma voglio essere in grado di utilizzare == opreator per verificare se il messaggio è nullo.

Posso sovraccaricare == per valori nulli? Ho provato a sovraccaricarlo per object e chiamare object.ReferenceEquals(object, object) nel sovraccarico, ma questo non ha aiutato.

+3

Se non vuoi farlo in questo modo (che non consiglio), dovrai lanciare 'null' su uno dei tipi applicabili. 'messaggio == (stringa) null;' o 'message == (Message) null;' dovrebbe funzionare. – verdesmarald

+0

@verdesmarald: Sì, funziona ma speravo di trovare un modo per usarlo direttamente. Cosa raccomandi tra? –

+0

No, per quanto ne so non puoi farlo se vuoi avere più operatori '==' s. – verdesmarald

risposta

6

Fornire un'implementazione per operator ==(Message left, object right) e verificare il tipo di right per verificare se è null, una stringa o un messaggio.

In alternativa, definire un costruttore implicito per Messaggio che accetta una stringa. Vedere Operator overloading and different types per un esempio.