Errore del compilatore CS0173

Aggiornamento: novembre 2007

Messaggio di errore

Impossibile determinare il tipo di espressione condizionale perché non esiste conversione implicita tra 'classe1' e 'classe2'.
Type of conditional expression cannot be determined because there is no implicit conversion between 'class1' and 'class2'

Le conversioni tra le classi sono utili quando si desidera che oggetti di classi differenti funzionino con lo stesso codice. Due classi che verranno utilizzate insieme non possono, tuttavia, includere conversioni reciproche e ridondanti.

Per correggere l'errore CS0173, verificare che sia presente solamente una conversione implicita tra l'oggetto class1 e l'oggetto class2, indipendentemente dalla direzione e dalla classe di appartenenza della conversione. Per ulteriori informazioni, vedere Tabella delle conversioni numeriche implicite (Riferimenti per C#) e Operatori di conversione (Guida per programmatori C#).

Esempio

Il seguente codice di esempio genera l'errore CS0173:

// CS0173.cs
public class C {}
public class A {}

public class MyClass
{
   public static void F(bool b)
   {
      A a = new A();
      C c = new C();
      object o = b ? a : c;  // CS0173
   }

   public static void Main()
   {
      F(true);
   }
}

Il codice seguente comporta la generazione dell'errore CS0173 in Microsoft Visual Studio 2008, ma non in Visual Studio 2005.

//cs0173_2.cs
class M
{

static int Main ()
{
              int X = 1;
        object o = (X == 0) ? null : null; //CS0173
        return -1;
}
}