可空数组表示法

Hen*_*ter 30 c# arrays nullable-reference-types

我是可空的新手。

可能的符号之间是否存在有意义的差异? string?[] str string[]? str 甚至string?[]? str似乎都是有效的

Dmi*_*nko 46

当我们把引用类型放在?后面时,我们允许实例为. 所以我们有null

  • string?[]- 我们允许项目所在的字符串数组null(但数组本身不能null
  • string[]?- 可以是null自身的字符串数组(但不能有null项目)
  • string?[]? - 数组及其项目都允许 null

  • 在 C#8 之前,它始终是 `string?[]?` (7认同)
  • 很好的答案。不过,可能仍然存在一些混乱,我希望这不会增加它......“Array”和“string”都是引用类型(可以为空),因此“string?”和“string”是等效的,并且“在“vanilla”C# 中,无论版本如何,[]` 和 `[]?` 都是等效的(并且 `string?[]?` 和 `string[]` 之间没有区别)。为了进行区分,可空引用类型作为一项功能必须显式激活“#nullable enable”,因为它是对语言的破坏性更改,使得此类传统上等效的语句变得不等效。 (4认同)