Это текущие методы объявления и инициализации для простого массива.
string[] array = new string[2]; // creates array of length 2, default values
string[] array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
string[] array = new[] { "A", "B" }; // created populated array of length 2
Обратите внимание, что существуют другие методы получения массивов, такие как ToArray()
расширения Linq IEnumerable<T>
.
Также обратите внимание, что в приведенных выше объявлениях первые два можно заменить string[]
слева на var
(C # 3+), так как информации справа достаточно для вывода правильного типа. Третья строка должна быть записана так, как показано, поскольку одного синтаксиса инициализации массива недостаточно для удовлетворения требований компилятора. Четвертый может также использовать умозаключение. Так что, если вам нравится вся эта краткость, вышеприведенное можно записать как
var array = new string[2]; // creates array of length 2, default values
var array = new string[] { "A", "B" }; // creates populated array of length 2
string[] array = { "A" , "B" }; // creates populated array of length 2
var array = new[] { "A", "B" }; // created populated array of length 2
var
переменной?var x = {}
не работает, если инициализатор массива может дать что-то еще, кроме массивов, но я бы не знал, что это такое. Поэтому я предполагаю, что инициализатор массива - это особенность языка. Если вы используете его вместе сnew List<string> {"A", "B"}
ним, вы получите что- то другое.Синтаксисы создания массива в C #, которые выражениями :
В первом случае размер может быть любым неотрицательным целочисленным значением, а элементы массива инициализируются значениями по умолчанию.
Во втором случае размер должен быть постоянным, а количество заданных элементов должно совпадать. Должно быть неявное преобразование из данных элементов в данный тип элемента массива.
В третьем элемент должен быть неявно конвертируемым в тип элемента, а размер определяется из числа заданных элементов.
В четвертом тип элемента массива определяется путем вычисления наилучшего типа, если он есть, из всех заданных элементов, имеющих типы. Все элементы должны быть неявно конвертируемыми в этот тип. Размер определяется по количеству приведенных элементов. Этот синтаксис был введен в C # 3.0.
Существует также синтаксис, который может использоваться только в объявлении:
Элементы должны быть неявно конвертируемыми в тип элемента. Размер определяется по количеству приведенных элементов.
Я отсылаю вас к спецификации C # 4.0, раздел 7.6.10.4 «Выражения создания массива».
источник
Array.CreateInstance(typeof(int), 3)
!"1,2,3,4".split(',')
.new int[,] { { 3, 7 }, { 103, 107 }, { 10003, 10007 }, };
, и так далее дляint[,,]
,int[,,,]
...Непустые массивы
var data0 = new int[3]
var data1 = new int[3] { 1, 2, 3 }
var data2 = new int[] { 1, 2, 3 }
var data3 = new[] { 1, 2, 3 }
var data4 = { 1, 2, 3 }
не компилируется. Используйтеint[] data5 = { 1, 2, 3 }
вместо этого.Пустые массивы
var data6 = new int[0]
var data7 = new int[] { }
var data8 = new [] { }
иint[] data9 = new [] { }
не компилируются.var data10 = { }
не компилируется. Используйтеint[] data11 = { }
вместо этого.В качестве аргумента метода
Только выражения, которые могут быть назначены с
var
ключевым словом, могут быть переданы в качестве аргументов.Foo(new int[2])
Foo(new int[2] { 1, 2 })
Foo(new int[] { 1, 2 })
Foo(new[] { 1, 2 })
Foo({ 1, 2 })
не компилируетсяFoo(new int[0])
Foo(new int[] { })
Foo({})
не компилируетсяисточник
Создает массив пустых строк, повторяемых «количество раз». В случае, если вы хотите инициализировать массив с тем же, но специальным значением элемента по умолчанию. Осторожно со ссылочными типами, все элементы будут ссылаться на один и тот же объект.
источник
var arr1 = Enumerable.Repeat(new object(), 10).ToArray();
вас есть 10 ссылок на один и тот же объект. Чтобы создать 10 различных объектов, вы можете использоватьvar arr2 = Enumerable.Repeat(/* dummy: */ false, 10).Select(x => new object()).ToArray();
или аналогичные.источник
В случае, если вы хотите инициализировать фиксированный массив предварительно инициализированных равных (не
null
отличных отdefault
) элементов, используйте это:Также, пожалуйста, примите участие в этой дискуссии.
источник
Пример создания массива пользовательского класса
Ниже приведено определение класса.
Вот как вы можете инициализировать массив:
источник
Повторите без LINQ :
источник
или
или
и в многомерном массиве
источник
источник
Еще один способ создания и инициализации массива объектов. Это похоже на пример, который @Amol опубликовал выше , за исключением того, что он использует конструкторы. Я не мог устоять перед каплей полиморфизма.
Классы для контекста:
источник
Для класса ниже:
Вы можете инициализировать массив вышеуказанного объекта, как показано ниже.
Надеюсь это поможет.
источник
Вы также можете создавать динамические массивы, т.е. вы можете сначала запросить размер массива у пользователя, прежде чем создавать его.
источник
Тривиальное решение с выражениями. Обратите внимание, что с NewArrayInit вы можете создать только одномерный массив.
источник
Просто записка
Следующие массивы:
Будет скомпилировано в:
источник