2

私は列挙型を持っています:

public enum MyEnum
{
    EnumValue1,
    EnumValue2,
}

MyEnum オブジェクトであることを確認したいオブジェクトがあると仮定すると、次の最初の行でコンパイル時エラーが発生します。

var myEnumValue = enumObject as MyEnum;

if(myEnumValue != null)
{
 ...
}

しかし、私は次のことができます:

var myEnumValue = (MyEnum)enumObject;

(ただし、例外が発生する可能性があります)

だから私は使用する必要があります:

if(enumObject is MyEnum)
{
 //and then assign enumObject to a MyEnum object
}

代わりは。

質問

asここで使用が許可されていないのに、キャストまたは使用が許可されているのはなぜisですか?

4

2 に答える 2

1

列挙は値の型であり、null にすることはできません。as返すには Nullable 型が必要です。

ただし、値の型を安全にキャストしたい場合は、明示的に nullable を使用して、null をas返す場合のデフォルト値を定義できます。

var myEnumValue = enumObject as MyEnum? ?? MyEnum.EnumValue1;
于 2013-11-04T10:58:17.887 に答える