2009-01-08 98 views
9

我獲得與下面的源代碼以下編譯錯誤:可空枚舉空類型問題

編譯錯誤:

無法確定條件表達式的類型,因爲有「」和「MyEnum之間的隱式轉換「

源代碼

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) 
    }; 
} 

我怎樣才能解決這個問題?

+0

的可能重複[可空類型的問題:條件運算符(http://stackoverflow.com/questions/295833/nullable-type-issue-with - 條件運算符) – nawfal 2013-12-18 09:47:10

回答

17

我想你只需要投Enum.Parse到結果3210。至少在可空的情況下是這種情況。例如:

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

所以:

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

MyClassEnum也必須爲空(明顯)。 – 2009-01-08 23:48:25

3

我想你只需要將結果投射到(MyEnum?)而不是(MyEnum)?

11

您的代碼中存在語法錯誤:':'和'?'的位置必須交換:

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

BTW:

據我所知,推薦的方法是使用命名,而不是可空枚舉「無」一個枚舉元素,如:

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

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