2012-05-12 3 views
0

Я не могу понять эти 2 странное поведениеПочему это странное поведение?

1. Первый Поведение

Я объявил переменную как этот

double[][] dd = 
{ 
    new double[10], 
    new double[10] 
}; 

Это не дает ошибку.

Но если я сделать так, что дает ошибку

double[][] dd; 

dd = { // Here it gives 2 errors says Invalid Expression { and ; expected 
     new double[10], 
     new double[10] //Here and in the above line it says only 
        //assignment, call, increment....can be used as a statement 
    }; 

Ошибка исчезает, если я это сделать

double[][] dd; 

dd = new double[][]{ 
        new double[10], 
        new double[10] 
        }; 

Почему?

2. Второй Поведения

Более это не ошибка, если дополнительная запятая , ставятся после последнего элемента массива в любом из вышеперечисленных случаев

{ 
new double[10], 
new double[10], //This comma here is not given as error. Why? 
}; 

В случае, если что дополнительная запятая не укажите, что после него следует добавить еще один объект.

ответ

4

Довольно старые документы, но все же актуальны. Что вы смотрите на это Array Initializers

Массив Инициализаторы могут быть указаны в объявления поля (раздел 10.4), декларации локальных переменных (раздел 8.5.1), и создания массива выражений (раздел 7.5 .10.2).

Обратите внимание, это не говорит о том, что они доступны в присваивании заявления, которое является то, что вы пытаетесь с вашей первой ошибкой.


Для вашего второго вопроса, причина, почему дополнительные , разрешено удобство - это особенно полезно, если код генерируется программным способом, если у вас нет специальной случае первый или последний элемент. Вы найдете аналогичный синтаксис, например. перечисления.

1
  1. Ваши примеры являются примерами синтаксиса C# Array Initializer. Выражение инициализатора может возникать только в строке, где вы определяете переменную. Мне кажется, что вы ожидаете, что нотация {} будет очень похожа, скажем, на выражения для выражения массива Python или Ruby's []. На самом деле это не так.

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

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