相关疑难解决方法(0)

在 C# 8 中,为什么对新表达式的类型推断会导致可空引用?

如果我有 C# 8 代码:

class Foo {}
Run Code Online (Sandbox Code Playgroud)

然后:

#nullable enable
var bar = new Foo();
Run Code Online (Sandbox Code Playgroud)

那么 的类型barFoo?。这显然不正确,因为new表达式不能返回null。为什么会bar是一个可为空的引用?我什至查阅了Nullable Reference Type Specification,发现了以下内容:

永远不为空的表达式

以下表达式形式的空状态始终为“非空”:

  • ...
  • new 表达式(对象、委托、匿名对象和数组创建表达式)
  • ...

并且:

var 的类型推断

为用 var 声明的局部变量推断的类型由初始化表达式的空状态通知。

var x = E;
Run Code Online (Sandbox Code Playgroud)

如果类型E是可空的引用类型C?和空状态E是“不空”,则推断该类型xC。否则,推断的类型是 的类型E

推断的类型的可空性x如上所述确定,基于 的注释上下文var,就像在该位置明确给出类型一样。

因此,根据我在规范中可以找到的所有内容,bar在我非常简单的示例中,应该是 type Foo,而不是 type Foo?。我错过了什么?

c# c#-8.0 nullable-reference-types

2
推荐指数
1
解决办法
413
查看次数

标签 统计

c# ×1

c#-8.0 ×1

nullable-reference-types ×1