Вопрос типа 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)
};
}
Как я могу устранить эту ошибку?
Решение
Я думаю, вам просто нужно привести результат 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)
КСТАТИ:
Насколько я знаю, рекомендуемым способом является использование элемента перечисления с именем «None» вместо перечисления с нулевым значением, например:
public enum MyEnum
{
None, Value1, Value2, Value3
}
и
MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None :
(MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true);
Я думаю, вам просто нужно привести результат к (MyEnum?), а не к (MyEnum)?
Не связан с StackOverflow