Существует разница между самим объектом массива и элементами массива.Когда вы используете decimal?[]
, вы объявляете массив, элементы которого имеют значения NULL decimal
.Если бы вы использовали decimal[]?
(я не уверен, что это правильный синтаксис, но только для пояснения, предположим, что это так), вы бы объявили переменную, которая может ссылаться на массив или не ссылаться ни на что.Последним является бесполезный случай, который вы описываете, потому что, как вы говорите (по крайней мере, в более старых версиях C #), все переменные массива являются ссылочными переменными, которые уже могут быть установлены на null
.
Чтобы прояснить разницу, рассмотримкод, опубликованный Алехандро, а также этот код:
decimal[]? reallyNullable = null;
Array.Sort(reallyNullable); // ArgumentNullException -- there is no array here
Array.Sort(nullable); // OK, assuming null can be compared to decimal.
Причина, по которой последняя строка в порядке, заключается в том, что здесь действительно указан объект массива.Единственное, что имеет значение null, это некоторые значения в нем.