2009-01-08 16 views
9

मैं निम्नलिखित स्रोत कोड के साथ निम्नलिखित संकलन त्रुटि:Nullable Enum नल प्रकार प्रश्न

संकलन त्रुटि:

क्योंकि '' और '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

के संभावित डुप्लिकेट [साथ Nullable प्रकार मुद्दा: सशर्त ऑपरेटर] (http://stackoverflow.com/questions/295833/nullable-type-issue-with -कंडिशन-ऑपरेटर) – nawfal

उत्तर

17

मुझे लगता है कि तुम सिर्फ Enum.Parseकरने का परिणाम कास्ट करने के लिए की जरूरत हैकम से कम शून्य के साथ यह मामला है। उदाहरण के लिए:

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

तो:

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

MyClassEnum भी शून्य (स्पष्ट रूप से) होना चाहिए। –

+0

धन्यवाद .... यह मेरी समस्या हल हो गया। –

+0

स्पष्ट होने के लिए यह केवल इसलिए होता है क्योंकि आप टर्नरी ऑपरेटर का उपयोग कर रहे हैं – basarat

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 
} 
:

जहाँ तक मुझे पता है, सुझाया गया तरीका एक enum तत्व एक Nullable enum के बजाय 'कोई नहीं' का नाम दिया है, जैसे उपयोग करने के लिए है

और

MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None : 
      (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true); 
संबंधित मुद्दे