C#:无法为隐式类型变量赋值null

时间:2018-01-25 12:30:09

标签: c#

根据Visual Studio,这不行:

range(0, len(v1))

但这没关系:

file(GLOB My_Source_Files src/*.cpp)
add_executable(ex ${My_Source_Files})

为什么呢? var foo = null; 是否也影响了else分支中的var foo = false ? (double?)null : null;

4 个答案:

答案 0 :(得分:4)

隐式类型变量声明/赋值有两个目的:

  • 决定变量的值,
  • 决定变量的类型。

您的第一个声明的值为null,无法确定类型(可能是System.ObjectNullable<T>派生的任何内容)。这就是为什么它是一个错误。

由于演员表,您的第二个声明会将类型指向Nullable<double>。这就是C#允许的原因。

毫无疑问,double? foo = null会更容易阅读。

答案 1 :(得分:2)

因为编译器无法预测null的类型。 Null也可以分配给任何可引用的数据类型也可以分配给任何引用类型变量。因此,对于隐式转换,您必须将null转换为某种特定类型。

var dt = (DateTime?)null; // This is correct
var dt1 = null; // This will throw compile time error.

答案 2 :(得分:1)

第二个示例具有double?类型,编译器知道它。根据{{​​3}}

  

重要的是要理解var关键字并不意味着   &#34;变体&#34;并且不表示变量是松散类型的,或者   后期绑定。它只是意味着编译器确定并分配了   最合适的类型。

编译器应确保类型与var匹配。

var foo = null;

编译器无法识别foo的类型。

var foo = false ? (double?)null : null;

现在foodouble?类型。

答案 3 :(得分:0)

=IF(C98="CAB",D98*R1-F98,F98-D98*S1) =IF(C99="CAB",I99*R6-D99,F99-I99*S6) 的null赋值给一个值,VS无法识别将要使用的类型(double,int,bool等)。当你不知道你的价值是什么类型时,常用Var。

您的第二个声明将该类型定位为Nullable,这就是您没有收到异常/错误的原因。