С#:Возможно ли неявное присвоение массива?

StackOverflow https://stackoverflow.com/questions/87970

  •  01-07-2019
  •  | 
  •  

Вопрос

Я хотел бы заполнить список массивов, указав список значений так же, как и целочисленный массив, но я не уверен, как это сделать без повторных вызовов метода «добавить».

Например, я хочу назначить { 1, 2, 3, «string1», «string2» } массиву.Я знаю, что для других массивов вы можете выполнить назначение следующим образом:

int[] IntArray = {1,2,3};

Есть ли аналогичный способ сделать это для массива?Я попробовал метод addrange, но метод фигурных скобок не реализует интерфейс ICollection.

Это было полезно?

Решение

В списке массивов есть ctor, который принимает ICollection, реализованный классом Array.

object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);

Другие советы

В зависимости от используемой вами версии C# у вас есть разные варианты.

В C# 3.0 есть инициализаторы коллекций, подробности см. Блог Скотта Гу

Вот пример вашей проблемы.

ArrayList list = new ArrayList {1,2,3};

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

Ваши комментарии подразумевают, что вы выбрали ArrayList, потому что это был первый найденный вами компонент.

Предполагая, что вы просто ищете список целых чисел, это, вероятно, лучший способ сделать это.

List<int> list = new List<int>{1,2,3};

И если вы используете C# 2.0 (в котором есть дженерики, но нет инициализаторов коллекций).

List<int> list = new List<int>(new int[] {1, 2, 3});

Хотя формат int[] может быть неправильным в более старых версиях, вам, возможно, придется указать количество элементов в массиве.

Я предполагаю, что вы не используете C# 3.0, в котором есть инициализаторы коллекций.Если вас не беспокоят затраты на создание временного массива, в версии 1.1/2.0 вы могли бы сделать это следующим образом:

ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});

(вроде как ответ на мой вопрос, но...)

Самое близкое к тому, что я нашел, — это использовать метод ArrayList.Adapter:

object[] values = { 1, 2, 3, "string1", "string2" };
ArrayList AL = new ArrayList();
AL = ArrayList.Adapter(values);

//or during intialization
ArrayList AL2 = ArrayList.Adapter(values);

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top