質問

次のソースコードで次のコンパイルエラーが表示されます。

コンパイルエラー:

''と '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?にキャストする必要があると思います。これは、少なくともnull入力可能intの場合です。例:

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)

ところで:

私が知る限り、推奨される方法は、Nullable enumの代わりに 'None'という名前のenum要素を使用することです。例:

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

and

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

結果を(MyEnum)ではなく(MyEnum?)にキャストする必要があると思いますか?

ライセンス: CC-BY-SA帰属
所属していません StackOverflow
scroll top