Dot-Net

Nullable Enum 可空類型問題

  • July 19, 2012

我收到以下原始碼的以下編譯錯誤:

編譯錯誤:

無法確定條件表達式的類型,因為 ’’ 和 ‘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)
  };
}

如何解決此錯誤?

我認為您只需要將結果轉換為Enum.Parseto MyEnum?。至少可以為空的整數就是這種情況。例如:

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

所以:

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

您的程式碼中存在語法錯誤:’:’ 和 ‘?’ 的位置 必須交換:

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

順便提一句:

據我所知,推薦的方法是使用名為“None”的列舉元素而不是 Nullable 列舉,例如:

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

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

引用自:https://stackoverflow.com/questions/426497