Подтвердить что ты не робот

Поле const ссылочного типа, отличное от строки, может быть инициализировано только с помощью null Error

Я пытаюсь создать 2D-массив для хранения некоторых значений, которые не изменяются так.

const int[,] hiveIndices = new int[,] {
{200,362},{250,370},{213,410} , 
{400,330} , {380,282} , {437, 295} ,
{325, 405} , {379,413} ,{343,453} , 
{450,382},{510,395},{468,430} ,
{585,330} , {645,340} , {603,375}
};

Но при компиляции я получаю эту ошибку

hiveIndices is of type 'int[*,*]'. 
A const field of a reference type other than string can only be initialized with null.

Если я изменяю const to static, он компилируется. Я не понимаю, как добавление кванта const должно вызвать такое поведение.

4b9b3361

Ответ 1

На самом деле вы пытаетесь сделать массив - ссылочный тип - const - это не будет влиять на изменчивость его значений вообще (вы все равно можете изменить любое значение в массиве) - создание массива readonly сделает его компиляцией, но не имеет желаемого эффекта. Константные выражения должны быть полностью оценены во время компиляции, поэтому новый оператор не допускается.

Возможно, вы ищете ReadOnlyCollection<T>

Подробнее см. соответствующую Ошибка компилятора CS0134:

Постоянное выражение - это выражение, которое может быть полностью оценено в время компиляции. Поскольку единственный способ создать ненулевое значение ссылочный тип заключается в применении нового оператора, а потому, что новый оператор не допускается в постоянном выражении, единственно возможным значение для констант ссылочных типов, отличных от строки, равно null.