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

Возможно создать массив во время компиляции как;

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

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

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

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

26
задан Patrick McDonald 22 August 2019 в 11:12
поделиться

4 ответа

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

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

РЕДАКТИРОВАТЬ:

Джон Феминелла предложил создать фабричный метод для примите список параметров и верните список, который вы можете реализовать следующим образом:

List<T> CreateList<T>(params T[] values)
{
    return new List<T>(values);
}

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

List<int> myValues = CreateList(1, 2, 3);
49
ответ дан 28 November 2019 в 06:10
поделиться

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

var list = Enumerable.Range(1,3).ToList();
33
ответ дан 28 November 2019 в 06:10
поделиться

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

Там нет «ярлыка» (инициализация списка) в C # 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, и вы можете «смешивать и сочетать» такие функции.

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

4
ответ дан 28 November 2019 в 06:10
поделиться

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

3
ответ дан 28 November 2019 в 06:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: