قيم الفارغة التعداد قيم الفارغة نوع السؤال

StackOverflow https://stackoverflow.com/questions/426497

  •  06-07-2019
  •  | 
  •  

سؤال

وأحصل على خطأ الترجمة التالية مع شفرة المصدر التالية:

وتجميع خطأ:

ونوع من التعبير الشرطي لا يمكن تحديده لأنه لا يوجد التحويل الضمني بين '' و '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.Parse إلى 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)

وراجع للشغل:

وبقدر ما أعرف، والطريقة الموصى بها هي لاستخدام التعداد عنصر اسمه 'بلا' بدلا من التعداد قيم الفارغة، منها مثلا:

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

و

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

وأعتقد أنك سوف تحتاج فقط للادلاء النتيجة إلى (MyEnum؟) بدلا من (MyEnum)؟

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top