Константное поле ссылочного типа, отличного от строки, может быть инициализировано только нулевым значением Error [duplicate]

На этот вопрос уже есть ответ здесь:

Объявить константный массив 13 ответов

Я пытаюсь создать 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компилируется. Я не понимаю, как добавление константного квантификатора должно вызывать такое поведение.

Ответы на вопрос(1)

Решение Вопроса

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

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

Для получения дополнительной информации см. СоответствующийОшибка компилятора CS0134:

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

 ABH31 мар. 2012 г., 08:02
Окей, спасибо. это было бы слишком болтливо, но я спрашиваю как новый пользователь. Должен ли я удалить свой ответ или я должен обновить его? Какая лучшая практика?
 ABH31 мар. 2012 г., 08:10
Большое спасибо BrokernGlass :)
 BrokenGlass31 мар. 2012 г., 08:00
Я не понизил ваш ответ, но, вероятно, да - ваш ответ сделает кодкомпилировать но вы все еще можете изменять элементы массива, против чего OP хочет защититься
 ABH31 мар. 2012 г., 06:45
Отличное объяснение, спасибо.
 BrokenGlass31 мар. 2012 г., 08:05
На данный момент, если у вас нет лучшего ответа, вы можете просто удалить его, и вы получите отрицательную репутацию

Ваш ответ на вопрос