岗位
default value expressions (C# programming guide)
微软解释了
default(T)
. 其行为(现在仍然)如下:
var x = default(uint?);
Assert.IsNull(x); // ok
uint? y = default;
Assert.IsNull(y); // ok
文章接着解释了
default
default literal and type inference
void BeforeCsharp7_1(uint? z = default(uint?))
{
Assert.IsNull(z); // ok
}
使用C#7.1,我们可以:
void WithCsharp7_1(uint? z = default)
{
Assert.IsNull(z); // Fail, expected null but was 0
}
z
等于
0
. 在将我的项目升级到C#7.1之后,Visual Studio一直告诉我
default(uint?)
可以简化为
这就导致了这种截然不同的行为。这一定是Visual Studio中的一个bug。
这也是C#规范/Roslyn中的一个缺陷,还是设计上的缺陷?