В чем разница между этими двумя объявлениями массивов? - PullRequest
10 голосов
/ 02 августа 2011

Кажется, эти два объявления одинаковы:

int[] array1 = {11, 22, 33};

и

int[] array2 = new int[] {11, 22, 33};

Но зачем нужна эта часть new int[] во втором образце?
Это имеет значение?

Ответы [ 5 ]

11 голосов
/ 02 августа 2011

В этом случае нет никакой разницы - но первый синтаксис только доступен при объявлении переменной.Из раздела 12.6 спецификации C # 4:

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

(«Инициализатор массива»)это бит в фигурных скобках - а выражение создания массива - это форма, в которой вы указываете new int[] или что-то еще.)

Когда вы не объявляете локальную переменную или поле (например, если вы передаетеаргумент метода) вы должны использовать вторую форму, или из C # 3.0 вы можете использовать неявно типизированный массив:

Foo(new[] { 1, 2, 3} );
2 голосов
/ 02 августа 2011

Не имеет значения.Они оба одинаковы.

1 голос
/ 02 августа 2011

Оба одинаковы

посмотрите этот код:

int[] arr1={1,2,3,4};
int[] arr2= new int[]{1,2,3,4};

с использованием отражателя оба преобразуются в следующее:

int[] expr_07 = new int[]
            {
                1, 
                2, 
                3, 
                4
            };
            int[] expr_19 = new int[]
            {
                1, 
                2, 
                3, 
                4
            };
1 голос
/ 02 августа 2011

Поскольку вы предоставляете инициализатор в той же строке , в которой вы декларируете, вы можете пропустить новый оператор.

// Это нормально

int [] i32Array = {1,2,3,4,5};

// Это НЕ

int [] i32Array; i32Array = {1,2,3,4,5};

Если ваше определение и инициация происходят в другой строке, вам придется сделать это

i32Array = new int [] {1,2,3,4,5};

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

1 голос
/ 02 августа 2011
int[] array1; // declare array1 as an int array of any size
array1 = new int[10];  // array1 is a 10-element array
array1 = new int[20];  // now it's a 20-element array

int[] array2 = new int[5] {1, 2, 3, 4, 5}; // declare array 2 as an int array of size 5

Оба одинаковы. Смотрите здесь в MSDN об инициализации массивов .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...