在检查变量是否为枚举值时,为什么不能使用'as'?

2 c# types casting object type-conversion

我有一个枚举:

public enum MyEnum
{
    EnumValue1,
    EnumValue2,
}
Run Code Online (Sandbox Code Playgroud)

假设我有一个我想检查作为MyEnum对象的对象,我得到第一行的编译时错误:

var myEnumValue = enumObject as MyEnum;

if(myEnumValue != null)
{
 ...
}
Run Code Online (Sandbox Code Playgroud)

但我可以做到以下几点:

var myEnumValue = (MyEnum)enumObject;
Run Code Online (Sandbox Code Playgroud)

(但这可能引发例外)

所以我必须使用:

if(enumObject is MyEnum)
{
 //and then assign enumObject to a MyEnum object
}
Run Code Online (Sandbox Code Playgroud)

代替.

为什么在as这里使用不允许但使用铸造或使用is

p.s*_*w.g 7

您不能使用as任何值类型(可空类型除外).

原因是如果无法转换对象,则as返回关键字null,但值类型不能null.

  • "你不能像任何价值类型一样使用." - 实际上,你可以使用`as`和**正好一半的可用值类型.想一想......(如果你想要提示,请告诉我) (5认同)