繁体   English   中英

C# 8 的可空引用类型

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM