根据Visual Studio,这不行:
var foo = null;
Run Code Online (Sandbox Code Playgroud)
但这没关系:
var foo = false ? (double?)null : null;
Run Code Online (Sandbox Code Playgroud)
为什么?是否(double?)null也在nullelse分支中起作用?
因为编译器无法预测null的类型。Null 可以分配给任何可为空的数据类型,也可以分配给任何引用类型变量。因此,对于隐式转换,您必须将 null 强制转换为某种特定类型。
var dt = (DateTime?)null; // This is correct
var dt1 = null; // This will throw compile time error.
Run Code Online (Sandbox Code Playgroud)
隐式类型变量声明/赋值有两个目的:
您的第一个声明具有null该值,而没有办法弄清楚类型(它可以是从System.Object或派生的任何东西Nullable<T>)。这就是为什么它是一个错误。
您的第二个声明将类型精确定位为Nullable<double>因为强制转换。这就是C#允许它的原因。
不用说,它double? foo = null会更容易阅读。
| 归档时间: |
|
| 查看次数: |
4465 次 |
| 最近记录: |