Noe*_*mer 4 c# specifications default roslyn
微软发布的默认值表达式(C# 编程指南)解释了default(T). 行为是(现在仍然是)如下:
var x = default(uint?);
Assert.IsNull(x); // ok
uint? y = default;
Assert.IsNull(y); // ok
Run Code Online (Sandbox Code Playgroud)
然后,该帖子继续并解释了C# 7.1 中引入的default(默认文字和类型推断)的用法和行为。在 C# 7.1 之前,我们做了:
void BeforeCsharp7_1(uint? z = default(uint?))
{
Assert.IsNull(z); // ok
}
Run Code Online (Sandbox Code Playgroud)
使用 C# 7.1,我们可以:
void WithCsharp7_1(uint? z = default)
{
Assert.IsNull(z); // Fail, expected null but was 0
}
Run Code Online (Sandbox Code Playgroud)
您可能会惊讶地发现最后一个片段不会断言,因为参数z等于0。将我的项目升级到 C# 7.1 后,Visual Studio 一直告诉我default(uint?)可以简化为default,然后导致这种非常不同的行为。这一定是 Visual Studio 中的错误。
这也是 C# 规范 / Roslyn 中的错误还是设计使然?
| 归档时间: |
|
| 查看次数: |
98 次 |
| 最近记录: |