可空数组表示法

Posted

技术标签:

【中文标题】可空数组表示法【英文标题】:Nullable Array Notation 【发布时间】:2021-08-19 18:44:16 【问题描述】:

我是 nullable 的新手。

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

【问题讨论】:

string?[] -- 一个字符串数组,其中每个元素可能为空,但数组本身可能不是。 string[]? -- 每个元素不能为空,但数组本身可以为空。 string?[]? -- 每个元素都可以为空,数组本身也可以为空 ? 允许nullstring?[] - 可以有null 项的字符串数组,string[]? 可以为空的数组,但(当它不为空时)不能有null 项。 string?[]? 可以有null 项,也可以是null 本身 【参考方案1】:

当我们将? 放在reference type 之后时,我们允许实例为null。所以我们有

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

【讨论】:

Pre C#8 它总是string?[]? @Tim Schmelter:是的,在 pre c# 8 中,我们总是可以将 null 分配给项目或数组本身;所以,从技术上讲,我们有string?[]? 很好的答案。不过可能仍然存在一些混乱,我希望这不会增加... @ 和 []? 在“香草”C# 中是等效的(string?[]?string[] 之间没有区别),无论版本如何。要进行区分,必须明确激活可空引用类型作为一项功能#nullable enable,因为它是对语言的一项重大更改,使得这些传统上等价的语句不等价。

以上是关于可空数组表示法的主要内容,如果未能解决你的问题,请参考以下文章

可空类型(Nullable)

Swift-可空链式调用(Optional Chaining)(十五)

csharp Json可空字段(字符串,数组)转换器

C#可空类型(Nullable)

C#--可空类型(Nullable)

Swift-可空链式调用(Optional Chaining)(十五)