Подтвердить что ты не робот

В чем разница между новой [] и новой строкой []?

Возможный дубликат:
Что это за новая [] сокращенная версия для?

Есть ли разница между

var strings = new string[] { "hello", "world" };

и

var strings2 = new[] { "hello", "world" };
4b9b3361

Ответ 2

Никакой разницы.

Второй - синтаксический сахар, называемый "Неявно типизированные массивы" , и оба выражения возвращают массив строк.

Если вы не укажете тип массива, он выводится из типов элементов, используемых для инициализации массива.
Чтобы разрешить вывод, выражение должно удовлетворять следующему условию:

Учитывая неявное типизированное выражение массива, подобное этому:

   var arr = new []{ obj1, ... , objn }

и набор всех типов элементов в инициализации:

   S = {T1, ..., Tn}

чтобы разрешить вывод (т.е. ошибка компилятора), должно быть возможно, чтобы все типы { T1, ... , Tn } были неявно приведены к одному из типов в наборе S.

Так, например, заданы следующие классы:

class Base { }
class Derived1 : Base { }
class Derived2 : Base { }
class Derived3
{ 
    public static implicit operator Base(Derived3 m)
    { return null; }
}

Этот код компилируется:

var arr = new []{ new Derived1(), new Derived2(), new Derived3(), new Base()};

а следующее:

var arr = new []{ new Derived1(), new Derived2(), new Derived3() };

так как в первом случае все 3 типа могут быть неявно приведены к типу Base, а тип Base находится внутри набора S = { Derived1, Derived2, Derived3, Base }, тогда как во втором случае все типы не могут быть перенесены на один тип в набор S = { Derived1, Derived2, Derived3 }


Эта функция была введена с С# 3.0 вместе с анонимными типами и упрощает создание массивов последних.

Например, это было бы очень трудно получить без неявно типизированных массивов:

var arrayOfAnonymous = new[] { new { A = 3, B = 4 }, new { A = 2, B = 5 } };

Ответ 3

В этом случае нет разницы. Из-за hello и world находятся string;

var strings2 = new[] { "hello", "world" };

создает массив string[], который совпадает с первым.

enter image description here

Второй называется просто Implicitly Typed Arrays

Если мы сделаем еще один шаг, у них будет тот же код IL.

Ответ 4

Нет, компилятор интерпретирует его как new string[] { "hello", "world" };

Как и при использовании var, компилятор обрабатывает то, что вы имели в виду.

Ответ 6

Нет никакой разницы. Во втором случае компилятор С# достаточно умен, чтобы вывести тип массива, поскольку он видит, что значения, используемые для инициализации массива, имеют строку типа.