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这里不允许使用,但 cast 或 usingis是?

4

2 回答 2

7

您不能as与任何值类型一起使用(可空类型除外)。

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

于 2013-11-04T10:54:04.860 回答
1

枚举是值类型,不能为空。as需要一个 Nullable 类型才能返回。

然而,如果你想安全地转换一个值类型,你可以显式地使用一个可空对象并在as返回 null 时定义一个默认值:

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