相关疑难解决方法(0)

为什么 Visual Studio 将新创建的数组键入为可空?

我正在编写一个具有泛型类型的函数TVal。我写了这一行:

var zeroBased = new TVal[size];
Run Code Online (Sandbox Code Playgroud)

然后在 Visual Studio (VS) 中,我使用 alt+enter 替换var为显式类型。这是我得到的:

TVal[]? zeroBased = new TVal[size];
Run Code Online (Sandbox Code Playgroud)

我很惊讶地发现?运算符,表明该类型可能可以为空。我认为我会足够安全,假设类型在创建时永远不会为空new,并且可以刚刚完成:

TVal[] zeroBased = new TVal[size];
Run Code Online (Sandbox Code Playgroud)

是否存在在 C# 中实例化新数组可以返回 null 的情况?

注意:代码似乎在没有 的情况下编译得很好?,我只是对 VS 的建议很感兴趣......

最小可验证示例

打开 Visual Studio,与下面指定的版本相同,创建一个新项目,根据下面的 VS 项目文件内容启用可为空类型,创建一个新类,并弹出此函数:

public void Test<T>(int size)
{
  var tArr = new T[size];
}
Run Code Online (Sandbox Code Playgroud)

选择var并点击alt+enter,然后选择var用显式类型替换。如果行为与我所经历的相同,您将得到:

public void Test<T>(int size)
{
  T[]? tArr = new T[size];
}
Run Code Online (Sandbox Code Playgroud)

Visual Studio …

c# visual-studio c#-8.0 nullable-reference-types

6
推荐指数
3
解决办法
352
查看次数