C# 可空数组表示法
我对nullable一无所知 可能的符号之间是否存在有意义的差异?C# 可空数组表示法,c#,arrays,nullable-reference-types,C#,Arrays,Nullable Reference Types,我对nullable一无所知 可能的符号之间是否存在有意义的差异? string?[]str string[]?str 甚至string?[]?str似乎都是有效的当我们在允许实例为null之后放置?。所以我们有 string?[]-允许项为null的字符串数组(但数组本身不能为null) string[]?-字符串数组,可以是null本身(但不能有null项) string?[]?-数组及其项都允许为null string?[]——字符串数组,其中每个元素可以为空,但数组本身可能不为空字符串
string?[]str
string[]?str
甚至
string?[]?str
似乎都是有效的当我们在允许实例为null之后放置?
。所以我们有
string?[]
-允许项为null
的字符串数组(但数组本身不能为null
)
string[]?
-字符串数组,可以是null
本身(但不能有null
项)
string?[]?
-数组及其项都允许为null
string?[]
——字符串数组,其中每个元素可以为空,但数组本身可能不为空<代码>字符串[]?
——每个元素不能为空,但数组本身可以为空string?[]?
——每个元素都可以为空,数组本身也可以为空?
允许null
string?[]
-可以包含null
项的字符串数组,string[]?
可以为null,但(当它不是null时)不能包含null
项的数组string?[]?
可以有null
项,也可以是null
它本身在C#8之前,它总是string?[]?
@Tim Schmelter:是的,在C#8之前,我们总是可以将null
分配给项或数组本身;所以,从技术上讲,我们有string?[]?
很好的答案。尽管如此,一些困惑可能仍然存在,我希望这不会增加它。。。Array
和string
都是引用类型(可以为空),因此string?
和string
是等价的,而[]
和[].[].
在“香草”C中是等价的(而且无论版本如何,string?[].[].
和string[]
之间没有区别)。为了进行区分,作为一项功能的可空引用类型必须被显式激活#nullable enable
,因为这是对语言的一种突破性改变,使得这种传统上等价的语句变得不等价。