可空数组表示法

32

我刚接触可空类型。

这些可能的表示方式之间是否有实际意义上的区别? string?[] str string[]? str 甚至string?[]? str似乎都是合法的


11
string?[] -- 一个字符串数组,其中每个元素都可能为空,但数组本身不可以为空。string[]? -- 每个元素都不可为空,但数组本身可以为空。string?[]? -- 每个元素都可能为空,且数组本身也可以为空。 - canton7
1
? 允许 nullstring?[] - 字符串数组,可以包含 null 项,string[]? 数组可以为 null,但(当它不为 null 时)不能有 null 项。string?[]? 可以包含 null 项,也可以是 null - Dmitry Bychenko
1个回答

47

当我们在引用类型后面添加?时,就允许该实例为null。因此,我们有:

  • string?[]——字符串数组,其中我们允许项为null(但数组本身不能为null
  • string[]?——字符串数组本身可以为null(但它的项不能为null
  • string?[]?——允许数组及其项都为null

7
在 C#8 之前,它始终是 string?[]? - Tim Schmelter
1
@Tim Schmelter:是的,在 C# 8 之前,我们总是可以将 null 分配给项目或数组本身;因此,从技术上讲,我们有 string?[]? - Dmitry Bychenko
6
好的回答。虽然可能仍有些许困惑,但我希望这不会加重它...... 在"普通"的 C# 中,无论版本如何,Arraystring 都是引用类型(可以为 null),因此 string?string 是等效的,[][]? 是等效的(string?[]?string[] 之间没有区别)。要进行区分,需要显式激活可空参考类型作为特性 #nullable enable,因为否则这将是一种破坏性的语言更改,使得传统上等效的语句不再等效。 - AlanK

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接