C# 8 的可空引用类型

Nullable Reference Types with C# 8

空引用异常是程序失败的主要原因之一。托尼·霍尔称这是他的十亿美元错误。所以我特别期待 C# 8 和新的 nullable reference types 特性。我认为我已经很好地掌握了该功能及其对我的代码的意义。尽管有一个方面我正在努力解决问题,但这就是 default 的行为方式。

目前在 C# 中 default(string) 将 return 为空。但是,当 C# 8 出现时,执行 string x = default(string); 之类的操作肯定会立即发出编译器警告。这似乎有点悖论。我也想知道 default(string?) 是否可能,甚至 return 会是什么。我想它必须是空的,这只会增加我的困惑。

我认为还没有此功能的预览版,但我想知道是否有人知道如何处理它。

这个问题现在可以回答,而不是等待 C# 8 发布。 C# 现已开发 "in the open",所以请自己转到 SharpLab、select NullabaleReferenceTypes 分支并尝试代码。

它给出了一个 warning CS8600: Cannot convert null to non-nullable reference.,因为 default 的引用类型是 null 并且 null 不应分配给不可为 null 的 string

如果您希望在 VS2017 中测试预览,a preview plugin is available for the IDE, too