我有一个枚举:
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
?
答案 0 :(得分:7)
您不能将as
与任何值类型一起使用(nullable types除外)。
原因是如果无法转换对象,as
关键字将返回null
,但值类型不能为null
。
答案 1 :(得分:1)
枚举是值类型,不能为null。 as
需要Nullable类型才能返回。
但是,如果要安全地转换值类型,则可以显式使用可空,并在as
返回null时定义默认值:
var myEnumValue = enumObject as MyEnum? ?? MyEnum.EnumValue1;