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。
空引用异常是程序失败的主要原因之一。托尼·霍尔称这是他的十亿美元错误。所以我特别期待 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。