C #: Возможно ли неявное назначение Arraylist? - PullRequest
3 голосов
/ 18 сентября 2008

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

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

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

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

Ответы [ 5 ]

14 голосов
/ 18 сентября 2008

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

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

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

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

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

7 голосов
/ 18 сентября 2008

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

object[] myArray = new object[] {1,2,3,"string1","string2"};
ArrayList myArrayList = new ArrayList(myArray);
1 голос
/ 18 сентября 2008

Ваши комментарии означают, что вы выбрали 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 [] может быть неправильным в более старых версиях, возможно, вам придется указать количество элементов в массиве.

0 голосов
/ 18 сентября 2008

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

Самое близкое, что я нашел к тому, что я хочу, это использовать метод 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);

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

0 голосов
/ 18 сентября 2008

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

ArrayList list = new ArrayList(new object[] { 1, 2, 3, "string1", "string2"});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...