[英]Nullable Reference Types with C# 8
Null 引用异常是程序失败的主要来源之一。 托尼·霍尔称之为他的十亿美元错误。 所以我特别期待 C# 8 和新的可空引用类型功能。 我想我已经很好地掌握了这个特性以及它对我的代码意味着什么。 不过,有一个方面我正在努力解决问题,这就是default
的行为方式。
目前在 C# default(string)
将返回 null。 但是当 C# 8 出现时,就会执行类似string x = default(string);
的操作。 肯定应该立即给出编译器警告。 这似乎有点悖论。 我还想知道default(string?)
是否可能,它甚至会返回什么。 我想它必须是 null 这只会增加我的困惑。
我认为这个功能还没有预览版,但我想知道是否有人知道如何处理这个问题。
现在可以回答这个问题,而不用等待C#8的发布。 C#现在是“公开”开发的,因此让自己进入SharpLab ,选择NullabaleReferenceTypes
分支并尝试代码。
它发出warning CS8600: Cannot convert null to non-nullable reference.
default
,引用类型为null
并且不应将null
分配给不可为null的string
。
如果您希望在VS2017中测试预览, 则IDE还可使用预览插件 。
我也很好奇。
default(string?) // no warning, returns null when nullable reference types are enabled
default(string) // warning CS8603 when nullable reference types are enabled, but it compiles successfully and actually, it returns null, too.
这意味着:在以下场景中,字符串a
不可为空,但实际上是 null。
string MyMethod(){
return default;
}
string a = MyMethod();
因此,如果MyMethod
来自启用了 NullableReferenceTypes 的外部库,则库开发人员仍然可能搞砸了,并且该方法返回 null。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.