2009-01-08 17 views
9

erhalte ich die folgenden Kompilierungsfehler mit folgendem Quelltext:Nullable Enum Nullable Type Frage

Compilation Fehler:

Art des bedingten Ausdrucks nicht bestimmt werden kann, 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?

+0

möglich Duplikat [Nullable Typ Problem mit: Bedingte Operator] (http://stackoverflow.com/questions/295833/nullable-type-issue-with -conditional-operator) – nawfal

Antwort

17

ich denke, man muss nur das Ergebnis von Enum.Parse-gegossen. Dies ist zumindest bei NULL-fähigen Ints der Fall. ZB:

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

So:

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

MyClassEnum muss auch nullable (offensichtlich) sein. –

+0

Danke .... Das hat mein Problem gelöst. –

+0

Um klar zu sein, geschieht dies nur, weil Sie den ternären Operator verwenden – basarat

3

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

11

Es gibt einen Syntaxfehler in Ihrem Code: die Position von ':' und '?'

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

BTW: muss ausgetauscht werden

soweit ich weiß, ist die empfohlene Art und Weise ist ein Enum-Element 'Keine' anstelle eines Nullable Enum genannt zu verwenden, zB:

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

und

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