可空数组表示法
Posted
技术标签:
【中文标题】可空数组表示法【英文标题】:Nullable Array Notation 【发布时间】:2021-08-19 18:44:16 【问题描述】:我是 nullable 的新手。
可能的符号之间是否存在有意义的差异?
string?[] str
string[]? str
甚至string?[]? str
似乎都有效
【问题讨论】:
string?[]
-- 一个字符串数组,其中每个元素可能为空,但数组本身可能不是。 string[]?
-- 每个元素不能为空,但数组本身可以为空。 string?[]?
-- 每个元素都可以为空,数组本身也可以为空
?
允许null
。 string?[]
- 可以有null
项的字符串数组,string[]?
可以为空的数组,但(当它不为空时)不能有null
项。 string?[]?
可以有null
项,也可以是null
本身
【参考方案1】:
当我们将?
放在reference type 之后时,我们允许实例为null
。所以我们有
string?[]
- 我们允许项目为null
的字符串数组(但数组本身不能为null
)
string[]?
- 字符串数组,可以是 null
本身(但不能有 null
项)
string?[]?
- 数组及其项都允许为 null
【讨论】:
Pre C#8 它总是string?[]?
@Tim Schmelter:是的,在 pre c# 8 中,我们总是可以将 null
分配给项目或数组本身;所以,从技术上讲,我们有string?[]?
很好的答案。不过可能仍然存在一些混乱,我希望这不会增加... @ 和 []?
在“香草”C# 中是等效的(string?[]?
和 string[]
之间没有区别),无论版本如何。要进行区分,必须明确激活可空引用类型作为一项功能#nullable enable
,因为它是对语言的一项重大更改,使得这些传统上等价的语句不等价。以上是关于可空数组表示法的主要内容,如果未能解决你的问题,请参考以下文章