Problema di conversione implicito in una condizione ternaria

Possibile duplicato:
L’operatore condizionale non può esprimere implicitamente?
Perché null ha bisogno di un cast di tipo esplicito qui?

Ho effettuato una ricerca e non ho trovato una buona spiegazione del perché si verifica quanto segue.
Ho due classi che hanno un’interfaccia in comune e ho provato a inizializzare un’istanza di questo tipo di interfaccia usando l’operatore ternario come sotto ma questo non riesce a compilare con l’errore “Il tipo di espressione condizionale non può essere determinato perché non esiste una conversione implicita tra ‘xxx.Class1’ e ‘xxx.Class2’:

public ConsoleLogger : ILogger { .... } public SuppressLogger : ILogger { .... } static void Main(string[] args) { ..... // The following creates the compile error ILogger logger = suppressLogging ? new SuppressLogger() : new ConsoleLogger(); } 

Funziona se lancio esplicitamente la prima conditioin alla mia interfaccia:

  ILogger logger = suppressLogging ? ((ILogger)new SuppressLogger()) : new ConsoleLogger(); 

e ovviamente posso sempre farlo:

  ILogger logger; if (suppressLogging) { logger = new SuppressLogger(); } else { logger = new ConsoleLogger(); } 

Le alternative vanno bene, ma non riesco a capire perché la prima opzione fallisce con l’errore di conversione implicito in quanto, a mio avviso, entrambe le classi sono di tipo ILogger e non sto davvero cercando di effettuare una conversione (implicita o esplicita ). Sono sicuro che questo è probabilmente un problema di compilazione del linguaggio statico, ma mi piacerebbe capire cosa sta succedendo.