10

次のソース コードで次のコンパイル エラーが発生します。

コンパイル エラー:

'' と '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)
   };
}

このエラーを解決するにはどうすればよいですか?

4

3 に答える 3

18

Enum.Parsetoの結果をキャストするだけでよいと思いますMyEnum?。これは、少なくとも nullable int の場合です。例えば:

int? i;
i = shouldBeNull ? null : (int?) 123;

そう:

MyClassEnum = Convert.IsDBNull(x)
    ? null
    : (MyEnum?) Enum.Parse(typeof(MyEnum), x.ToString(), true)
于 2009-01-08T23:43:13.483 に答える
11

コードに構文エラーがあります: ':' と '?' の位置 交換する必要があります:

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

ところで:

私の知る限り、推奨される方法は、Nullable enum の代わりに「None」という名前の enum-element を使用することです。

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

MyClassEnum = Convert.IsDBNull(x) ? MyEnum.None : 
            (MyEnum) Enum.Parse(typeof(MyEnum), x.ToString(), true);
于 2009-01-08T23:43:12.343 に答える
4

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

于 2009-01-08T23:42:59.363 に答える