c# - C# 为什么 `as` 为空值类型提供 null?

  显示原文与译文双语对照的内容
123 3
long? i = 10000;
int? s = i as int?;

为什么在 s 变量中给我一个空?我知道用它铸造它int? s = (int?)i;可以正常工作,但为什么我不能使用 as 运算符?

时间:原作者:0个回答

114 1

来自 MSDN:

代码与下列表达式等效,只是表达式变量只计算一次。

expression is type? (type)expression : (type)null

由于 i is int? 是 false,as 关键字将返回 (int?)null

原作者:
146 4

这些类型不相等,并且你得到 null,这就是 as的工作原理

不过,你可以直接

long? i = 10000;
var s = (int?)i;
//or even better make sure its *checked* 
var s = checked((int?)i);

额外资源

检查了( C# 引用)

确保编译器运行时,检查整数类型操作或转换时出现的溢出。

原作者:
96 3

as 运算符类似于强制转换操作。但是,如果不可能转换,as 将返回 null,而不是引发异常。

参考:https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/keywords/as
在你的情况下 as 隐藏了 OverflowException

原作者:
...