使用可空文字的真正时髦的C#编译器行为

bit*_*onk 1 c# compiler-construction null nullable literals

C#4.0编译器没有抱怨这个(甚至没有警告):

if(10.0 > null + 1)
{       
}

if (myDoubleValue > null)
{
}
Run Code Online (Sandbox Code Playgroud)

而且似乎总是错误的.这里发生了什么?null会自动转换Nullable<double>为什么?

如果是这样,为什么这不起作用呢:

double myDoubleValue = null + 1;
Run Code Online (Sandbox Code Playgroud)

另外,为什么我会想要这样的行为.为什么有可能玩这样的文字是一件好事.

Jon*_*eet 8

赋值不起作用的原因是结果是类型double?,而不是double.结果将始终是double?(aka Nullable<double>)类型的空值.

哦,前两个块都应该让编译器抱怨,并发出如下警告:

Test.cs(7,19):警告CS0458:表达式的结果总是为'int'类型的'null'
Test.cs(12,13):警告CS0464:与'double'类型的null比较 总是产生'假'

管理编译没有错误与不抱怨:)