为什么' as'运算符不能用于解析不可为空的值类型?

时间:2014-06-17 13:28:51

标签: c# theory

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

我注意到'as'运算符出现了打嗝 - 您无法使用它来执行非可空值类型之间的转换。我在关键字上阅读MSDN上的文档,他们还将其解释为“您可以使用as运算符在兼容的引用类型或可空类型之间执行某些类型的转换。”

我用以下方法对此进行了测试:

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

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

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

1 个答案:

答案 0 :(得分:8)

如果解析失败,

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

请参阅:as (C# Reference)

  

您可以使用as运算符执行某些类型的转换   在兼容的引用类型或可空类型之间

也来自同一doc link

  

as运算符就像一个强制转换操作。但是,如果转换   是不可能的,因为返回null而不是引发异常。