cd4*_*415 0 c# arrays nullable
我看到这样的代码,我理解为使数组可以为空但我不明白为什么我们需要它,因为数组是ref类型,所以它们已经可以为空了.
所以,我的问题是为什么我们需要这个呢?
private readonly decimal?[] _amounts = new decimal?[_count];
Run Code Online (Sandbox Code Playgroud)
将其声明为decimal?[]表示数组包含的元素可以null是非空的.
在不使其可为空的情况下,数组可以存储的元素 不可能null.
换句话说,decimal?[]读作" 可空小数数组".的?,因为所有的阵列是引用类型指的是该阵列可以含有的元素,而不是数组本身.
值得一提的是,从 C# 8.0 开始,您可以拥有一个可为空的引用类型:https : //docs.microsoft.com/en-us/dotnet/csharp/tutorials/nullable-reference-types
但正如其他人提到的那样:
private readonly decimal?[] _amounts = new decimal?[_count];
Run Code Online (Sandbox Code Playgroud)
表示数组中的值类型元素可以为空。decimal是值类型,通常你不能为它赋值 null,但如果你有,decimal?那么你可以。
在启用 C# 8.0 和可为空引用类型功能的情况下,如果要将引用类型分配给它们,则应将引用类型声明为可为空引用类型,否则默认情况下您将收到编译器警告。您可以像这样声明一个:
private decimal?[]? _amounts;
Run Code Online (Sandbox Code Playgroud)
现在这意味着数组中的两个元素都可以为空,整个数组(_amounts 变量)可以为空。
所以一般来说,元素值类型之后?和之前的问号[] -> SomeValueType?[]意味着数组中的元素可以为空。从 C# 8.0(在项目中启用功能)?数组类型后的问号SomeArrayType[] -> SomeArrayType[]?意味着您可以将 null 分配给保存对数组的引用的变量。