2016-08-05 4 views
-3

Я видел All possible C# array initialization syntaxes, который показывает несколько различных способов инициализации массива.Разница в инициализации массива с новым оператором и без него

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

Initialization:

string[] strArray = {"one","two","three"}; 

По сравнению с string[] strArray = new String[] {"one","two","three"};

+2

Вы пробовали? Что ты получил? –

+1

Что это значит, что он создает экземпляр? Вы попробовали это и получили объект, который вы можете использовать? – itsme86

+0

@ Alexei Levenkov: Это очень храбрый из вас, но теперь вы ушли, и первое предложение моего ответа звучит странно в ретроспективе :( – BoltClock

ответ

1

Это синтаксический сахар. Компилятор преобразует это:

string[] strArray = {"one","two","three"}; 

Для этого:

string[] expr_07 = new string[] { 
      "one", 
      "two", 
      "three" 
     }; 

Над выходом используется Рослин C# компилятор.

1

Вы не можете инициализировать то, чего там нет. Так что да, новый экземпляр создается, точно так же, как если бы у вас был, написанный оператором new. Это просто удобство, предоставляемое языком, когда вы инициализируете массив одновременно с тем, что вы его объявляете, поэтому вы не являетесь принудительно, чтобы записать его (при выполнении этого в отдельном заявлении оператор new требуется, потому что компилятор не может предположить, что вы еще не назначили ссылку массива на переменную заранее - самый минимальный минимум, который вы можете получить в отдельном заявлении, - strArray = new[] {...};).