为什么可以'操作符不能用于解析非空值类型

本文关键字:用于 类型 空值 不能 操作符 为什么 | 更新日期: 2023-09-27 18:09:02

每个开发者都有他/她自己的标准。有些开发人员喜欢使用<type>.TryParse(),有些开发人员喜欢使用(type)object;,而有些开发人员则喜欢使用关键字。

我注意到'as'操作符的一个小问题——你不能用它来执行非空值类型之间的转换。我在MSDN上阅读了as关键字的文档,他们也解释说"您可以使用as操作符在兼容引用类型或可空类型之间执行某些类型的转换。"

我用下面的代码进行了测试:

                    int i = 0;
                    var k = i as int; //Breaks
                    int i = 0;
                    var k = i as int?; //Works

是什么原因决定了as关键字以这种方式执行?

为什么可以'操作符不能用于解析非空值类型

如果解析失败,

as操作符将返回null。由于int是一个不可空的值类型,因此您会得到错误,而int?Nullable<int>可以保存null值,这就是第二个代码片段有效的原因。

参见:as (c# Reference)

可以使用as操作符来执行某些类型的转换兼容的引用类型或可空类型

也来自同一文档链接

as操作符类似于强制转换操作。但是,表示转换

是不可能的,因为返回null而不是引发异常。