2009-01-08 26 views
9

alıyorum aşağıdaki kaynak kodu ile aşağıdaki derleme hatası:null Enum null tip soru

Derleme hatası:

'' ve 'MyEnum arasında hiçbir örtük dönüştürme olduğundan koşullu ifadenin türü tespit edilemeyen

'

Kaynak Kodu

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) 
    }; 
} 
Bu hatayı gidermek nasıl

?

+0

olası yinelenen [ile null tip sorunu:? Koşullu Operatör] (http://stackoverflow.com/questions/295833/nullable-type-issue-with koşullu operatör) – nawfal

cevap

17

Ben sadece Enum.Parseiçin sonucunu döküm gerektiğini düşünüyorum. En azından nullsayılabilir satırlarda durum böyle. Ör: Yani

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

:

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

MyClassEnum da (açıkçası) nulla olmalıdır. –

+0

Teşekkürler ... Bu benim sorunumu çözdü. –

+0

Açık olması gerekirse, bu yalnızca üçlü operatörü kullandığınız için olur – basarat

3

Sadece sonucu (MyEnum) yerine (MyEnum) yerine almanız gerekecek mi?

11

Kodunuzda bir sözdizimi hatası var: ':' ve '?' değiştirilmelidir: BTW

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

:

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

olarak bildiğim kadarıyla, önerilen yöntem yerine null enum 'Yok' adlı bir enum-element, örneğin kullanmaktır

ve

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