Nullable Enum nullable型の質問
質問
次のソースコードで次のコンパイルエラーが表示されます。
コンパイルエラー:
''と '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?)にキャストする必要があると思いますか?
所属していません StackOverflow