Compilerfehler CS0173Compiler Error CS0173

Der Typ des bedingten Ausdrucks kann nicht bestimmt werden, da keine implizite Konvertierung zwischen „class1“ und „class2“ vorhanden ist.Type of conditional expression cannot be determined because there is no implicit conversion between 'class1' and 'class2'

Konvertierungen zwischen Klassen sind hilfreich, wenn Sie möchten, dass Objekte von anderen Klassen mit dem gleichen Code arbeiten.Conversions between classes are useful when you want objects of different classes to work with the same code. Allerdings können zwei Klassen, die zusammenarbeiten, keine gegenseitigen und redundanten Konvertierungen oder keine impliziten Konvertierungen haben.However, two classes that work together cannot have mutual and redundant conversions, or no implicit conversions. Die Typen von class1 und class2 werden unabhängig voneinander bestimmt, und der allgemeine Typ wird als der Typ des bedingten Ausdrucks ausgewählt.The types of class1 and class2 are determined independently, and the more general type is selected as the type of the conditional expression. Weitere Informationen darüber, wie Typen bestimmt werden, finden Sie unter Conditional operator cannot cast implicitly (Bedingter Operator kann nicht implizit umwandeln).For more information about how types are determined, see Conditional operator cannot cast implicitly.

Um CS0173 zu beheben, überprüfen Sie, ob nur eine implizite Konvertierung zwischen class1 und class2 vorhanden ist, unabhängig davon, in welche Richtung die Konvertierung geht und unabhängig davon, in welcher Klasse sie besteht.To resolve CS0173, verify that there is one and only one implicit conversion between class1 and class2, regardless of which direction the conversion is in and regardless of which class the conversion is in. Weitere Informationen finden Sie unter Tabelle für implizite numerische Konvertierungen und Konvertierungsoperatoren.For more information, see Implicit Numeric Conversions Table and Conversion Operators.

BeispielExample

Im folgenden Beispiel wird CS0173 generiert:The following sample generates CS0173:

// CS0173.cs  
public class C {}  

public class A   
{  
    //// The following code defines an implicit conversion operator from    
    //// type C to type A.  
    //public static implicit operator A(C c)  
    //{  
    //    A a = new A();  
    //    a = c;  
    //    return a;  
    //}  
}  

public class MyClass  
{  
    public static void F(bool b)  
    {  
        A a = new A();  
        C c = new C();  

        // The following line causes CS0173 because there is no implicit  
        // conversion from a to c or from c to a.  
        object o = b ? a : c;  

        // To resolve the error, you can cast a and c.  
        //object o = b ? (object)a : (object)c;  

        // Alternatively, you can add a conversion operator from class C to  
        // class A, or from class A to class C, but not both.  
    }  

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

BeispielExample

Der folgende Code erzeugt keinen CS0173 in Visual Studio 2005, jedoch in höheren Versionen.The following code does not produce CS0173 in Visual Studio 2005, but does in later versions.

//cs0173_2.cs  
class M  
{  
    static int Main ()  
    {  
        int X = 1;  
        // The following line causes CS0173 in Visual Studio 2005.  
        object o = (X == 0) ? null : null;  
        return -1;  
    }  
}