2014-11-08 5 views
-1

Я пытаюсь создать массив, содержащий 6 строк в одной строке и многие другие строки после этого. Это мой код:Ожидается инициализатор вложенного массива

string[, , , , , ,] conj = new string[,,,,,,] { 
     {"aimer", "aime", "aimes", "aime", "aimons", "aimez", "aiment"}, 
}; 

Я получаю сообщение об ошибке «Ожидается инициализатор вложенного массива». Я никогда раньше не делал массив, и я не мог найти ничего, что бы искало Google, почему я получаю эту ошибку и что мне нужно сделать, чтобы исправить это.

Спасибо за помощь!

+1

Я думаю, что перед началом написания кода стоит прочитать краткий обзор синтаксиса языка. Потребовалось всего 10 секунд, чтобы найти эту статью MSDN о массивах на C#. http://msdn.microsoft.com/en-Us/library/0a7fscd0.aspx – Fedor

+2

Этот вопрос не соответствует теме, поскольку речь идет о фундаментальной языковой функции (массивы), которая является предметом слишком широкой для переполнения стека ответ. Этот сайт не заменяет хорошую книгу, учебник или класс в школе. –

+1

Если бы это был синтаксис для этого, у вас были бы проблемы с большими массивами и еще более серьезные проблемы с массивами, размер которых не является постоянной времени компиляции. – harold

ответ

3

Вы пытаетесь инициализировать многомерный прямоугольный массив (7 измерений!).

Итак ...

// 1D array containing 2 elements: 
int[] r1d = { 1 , 2 , } ; 

// 2x3 array containing 6 elements: 
int[,] r2d = { 
       { 1 , 2 , 3 , } , 
       { 4 , 5 , 6 , } , 
      } ; 

// a 2x3x4 array 
int[,,] r3d = { 
       { 
        { 1 , 2 , 3 , 4 , } , 
        { 5 , 6 , 7 , 8 , } , 
        { 9 , 10 , 11 , 12 , } , 
       } , 
       { 
        { 13 , 14 , 15 , 16 , } , 
        { 17 , 18 , 19 , 20 , } , 
        { 21 , 22 , 23 , 24 , } , 
       } , 
       } ; 

Можно увидеть шаблон разработки здесь. Вы должны быть в состоянии взять это отсюда (Подсказка: у вас будут фигурные скобки, вложенные 7 глубоких).

Обратите внимание, что каждый инициализатор должен быть одного ранга, чтобы компилятор не расстроился. Например, если вы говорите:

int[,,] r3d = { 
       { 
        { 1 , 2 , 3 , 4 , } , 
        { 5 , 6 , 7 , 8 , } , 
        { 9 , 10 , 11 , 12 , } , 
       } , 
       { 
        { 13 , 14 , 15 , 16 , } , 
        { 17 , 18 , 19 , 20 , } , 
       //{ 21 , 22 , 23 , 24 , } , 
       } , 
       } ; 

Компилятор скулит и говорит, An array initializer of length '3' is expected. Это потому, что инициализатор для x3d[0,1] инициализаторы непоследовательны.

+0

О! Я думаю, что у меня было немного недоразумений в массивах. Я думал, что запятые были для номеров элементов, глядя на другой массив, который я закодировал ... поговорить о мозге пердеть. Спасибо за помощь! Я исправил проблему :) Мне просто нужна была одна запятая, так как это 2-й массив. @Nicholas – user2942895

+0

C# имеет две различные обозначения массива. Что касается двумерного массива, 'a [x] [y]' является массивом * jagged * или * sparse *, а 'b [x, y]' является * прямоугольным * или * смежным * массивом. Строго говоря, 'a [x] [y]' - массив массивов. Он имеет фиксированное количество строк, но каждый элемент строки 'a [x]' сам является массивом, выделенным индивидуально. Следовательно, каждая строка может иметь различное количество столбцов.'a [x, y]', с другой стороны, представляет собой единый непрерывный блок памяти с фиксированным числом строк и фиксированным числом столбцов. Разумеется, модель распространяется на все размеры, которые вы даете массиву. –

0

В вашем определении массива string[, , , , , ,] не должно быть запятых. Вместо этого сделайте string[].

Массив [] - это список вещей. То, что у вас было, называется прямоугольным массивом (хотя это определение может не применяться более долго с этим множеством измерений). В более простом случае: [,] (который действительно представляет собой прямоугольный массив), то, что вы получаете, более похоже на «сетку» элементов, а не на список.

Смежные вопросы