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

标签 c# object types casting type-conversion

我有一个枚举:

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 是?

最佳答案

您不能将 as 与任何值类型一起使用(nullable types 除外)。

原因是as关键字在对象不能被转换时返回null,但是值类型不能是null

关于c# - 为什么在检查变量是否为枚举值时不能使用 'as'?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19766167/

相关文章:

java - 使用 HashMap 和反射来调用具有可变参数类型的方法

c# - 直接修改 List<T> 元素

c# - 如何检查 json 中是否存在嵌套键?

javascript - 访问数组内的对象 - Javascript

javascript - AngularJS 在属性数组中组合对象

mysql - 存储 RSA key 的最佳 mysql 数据类型?

types - 为什么 Smalltalk 有时被称为 "dynamically typed"?

c# - 为什么 FtpWebRequest 将用户登录添加为目标数据集的一部分?

C# - 如何从 GZip 中读取文本文件

javascript - 循环对象时出现问题