Я получаю следующую ошибку компиляции со следующим исходным кодом:
Ошибка компиляции:
Тип условного выражения не может быть определен, потому что не существует неявного преобразования между '' и '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)
};
}
Как я могу исправить эту ошибку?





Я думаю, вам просто нужно будет преобразовать результат в (MyEnum?), А не в (MyEnum)?
В вашем коде есть синтаксическая ошибка: позиция ':' и '?' необходимо обменять:
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);
Думаю, нужно просто результат Enum.Parse закидать на MyEnum?. По крайней мере, так обстоит дело с целыми числами, допускающими значение NULL. Например.:
int? i;
i = shouldBeNull ? null : (int?) 123;
Так:
MyClassEnum = Convert.IsDBNull(x)
? null
: (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true)
MyClassEnum также должен допускать значение NULL (очевидно).
Чтобы было ясно, это происходит только потому, что вы используете тернарный оператор
возможный дубликат Проблема с типом, допускающим значение NULL, с?: Условным оператором