#c#
#c#
Вопрос:
Я разрабатываю программное обеспечение для обработки изображений.
int size = 3;
int[,] kernel = new int[size, size] {
{1, 2, 1},
{2, 4, 2},
{1, 2, 1}
};
Когда я компилирую свой код, у меня появляется сообщение об ошибке компиляции «Ожидается постоянное значение» от size
переменной. Я понимаю, что могу поставить 3 при своей kernel
инициализации массива или сделать свою size
константу. Я спрашиваю о технической причине этой ошибки, потому что для меня эта ошибка не имеет никакого смысла.
Ответ №1:
Вы можете либо создать массив с пустыми значениями, указав только размер (который может быть переменным), либо перечислить значения в инициализаторе и при необходимости указать постоянный размер. Но вы не можете комбинировать инициализатор с непостоянным размером. В случае инициализатора вам разрешено указывать постоянные значения для размера, если вы хотите убедиться, что результатом инициализатора будет массив определенного размера.
Просто избавьтесь от параметров размера, в вашем списке инициализаторов размер уже указан.
Комментарии:
1. Это была моя проблема — имеет смысл, если подумать об этом. К сожалению, мое «оправдание» в том, что мне также приходится кодировать в VB.Net. (Вы бы использовали:
Dim values As Object() = New Object(columnIds.Length - 1) {}
в VB.Net ), но только в C #:object[] values = new object[columnIds.Length];
Ответ №2:
Компилятору требуется постоянное выражение для рангов массива. Вы можете объявить size
как const int
, или вы можете просто позволить компилятору вычислить это из выражения инициализации:
int[,] kernel = new int[,] {
{1, 2, 1},
{2, 4, 2},
{1, 2, 1}
};
Ответ №3:
При уточнении вы добавляете элементы, поэтому вам не нужно указывать размер.
Так что это сработает :
int[,] kernel = new int[,] {
{1, 2, 1},
{2, 4, 2},
{1, 2, 1}
};