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

Создать список <int> со значениями во время компиляции

Можно создать массив во время компиляции, например:

int[] myValues = new int[] { 1, 2, 3 } ;

Но я хотел бы сделать что-то вроде этого:

List<int> myValues = new List<int>() { 1, 2, 3 };

Компилятор говорит Нет. Есть ли способ сделать это (С# 2.0) без использования LINQ (С# 3.0)?

4b9b3361

Ответ 1

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

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

EDIT:

Джон Фэминелла предложил создать метод factory, чтобы принять список параметров и вернуть список, который можно реализовать следующим образом:
List<T> CreateList<T>(params T[] values)
{
    return new List<T>(values);
}

который вы можете использовать следующим образом:

List<int> myValues = CreateList(1, 2, 3);

Ответ 2

У Патрика есть ответ, который вы ищете. Но я хотел добавить немного. Если вы хотите делать более длинный диапазон чисел и не хотите вводить их вручную, вы должны посмотреть на метод Enumerable.Range. Он может использоваться для создания диапазона последовательных чисел во время выполнения. Например, ваш образец мог быть записан следующим образом

var list = Enumerable.Range(1,3).ToList();

Ответ 3

Способ, который вы предлагаете, был впервые представлен в С# 3.0 (не имеет ничего общего с LINQ, это была языковая функция, которая была введена).

Там нет "ярлыка" (инициализация списка) в С# 2.0, чтобы сделать это, либо обновить список, а затем добавить числа вручную через myValues.Add, или вы могли бы сделать следующее:

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

Список T может принимать IEnumerable из T в его конструкторе, из которого он будет включать все T в том, что IEnumerable в созданном списке, поскольку int [] реализует IEnumerable of T, вы можете "смешивать и сопоставлять" функции так.

Кроме того, в С# 2.0 нет способа сделать такую ​​вещь, которую вы описываете.

Ответ 4

Инициализаторы коллекции - это просто синтаксический сахар, поэтому вы можете использовать их в приложении, ориентированном на 2.0, если вы компилируете компилятор 3.0.

Ответ 5

Вы также можете сделать это, используя System.Linq.Enumerable:

int[] categories = { 221, 222, 223, 224, 225, 226, 227, 228, 235, 236, 254, 255, 256 };        
var ticketsToProcess = categories.ToList();