Frage

Ich erhalte die folgenden Kompilierungsfehler mit folgendem Quelltext:

Compilation Fehler:

Art des bedingten Ausdrucks kann nicht bestimmt werden, weil es keine implizite Konvertierung zwischen ‚‘ und ‚MyEnum ist‘

Source Code

public enum MyEnum
{
    Value1, Value2, Value3
}

public class MyClass
{
    public MyClass() {}
    public MyEnum? MyClassEnum { get; set; }
}

public class Main()
{
   object x = new object();

   MyClass mc = new MyClass()
   {
        MyClassEnum = Convert.IsDBNull(x) : null ? 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true)
   };
}

Wie kann ich diesen Fehler beheben?

War es hilfreich?

Lösung

Ich denke, man muss nur das Ergebnis der Enum.Parse gieße MyEnum?. Dies ist der Fall mit Nullable-Ints zumindest. Z.

int? i;
i = shouldBeNull ? null : (int?) 123;

So:

MyClassEnum = Convert.IsDBNull(x)
    ? null
    : (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true)

Andere Tipps

Es gibt einen Syntaxfehler in Ihrem Code: die Position von ‚:‘ und ‚?‘ müssen ausgetauscht:

MyClassEnum = Convert.IsDBNull(x) ? null : 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true)

BTW:

soweit ich weiß, ist der empfohlene Weg, um eine ENUM-Element ‚Keine‘ genannt verwenden anstelle eines Nullable Enum, z:

public enum MyEnum
{
    None, Value1, Value2, Value3
}

und

MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None : 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true);

Ich denke, Sie werden nur das Ergebnis werfen müssen, um (MyEnum?) Und nicht (MyEnum)?

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top