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

Заполнить список <int> со значениями по умолчанию?

Возможный дубликат:
Автоинициализация списков С#

У меня есть список целых чисел, которые имеют определенную емкость, которую я хотел бы автоматически заполнить при объявлении.

List<int> x = new List<int>(10);

Есть ли более простой способ заполнить этот список с помощью 10 int, которые имеют значение по умолчанию для int, а не зацикливание и добавление элементов?

4b9b3361

Ответ 1

Ну, вы можете попросить LINQ сделать цикл для вас:

List<int> x = Enumerable.Repeat(value, count).ToList();

Неясно, имеет ли значение по умолчанию значение 0 или пользовательское значение по умолчанию.

Вы можете сделать это немного более эффективным (во время выполнения, что хуже в памяти), создав массив:

List<int> x = new List<int>(new int[count]);

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

Ответ 2

int defaultValue = 0;
return Enumerable.Repeat(defaultValue, 10).ToList();

Ответ 3

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

int[] x  = new int[10];

В качестве альтернативы это может быть хорошим местом для пользовательского метода расширения:

public static void Fill<T>(this ICollection<T> lst, int num)
{
    Fill(lst, default(T), num);
}

public static void Fill<T>(this ICollection<T> lst, T val, int num)
{
    lst.Clear();
    for(int i = 0; i < num; i++)
        lst.Add(val);
}

а затем вы можете даже добавить специальную перегрузку для класса List, чтобы заполнить до полной емкости:

public static void Fill<T>(this List<T> lst, T val)
{
    Fill(lst, val, lst.Capacity);
}
public static void Fill<T>(this List<T> lst)
{
    Fill(lst, default(T), lst.Capacity);
}

Тогда вы можете просто сказать:

List<int> x  = new List(10).Fill();

Ответ 4

Да

int[] arr = new int[10];
List<int> list = new List<int>(arr);

Ответ 5

var count = 10;
var list = new List<int>(new int[count]);

ADD

Вот общий метод для получения списка со значениями по умолчанию:

    public static List<T> GetListFilledWithDefaulValues<T>(int count)
    {
        if (count < 0)
            throw new ArgumentException("Count of elements cannot be less than zero", "count");

        return new List<T>(new T[count]);
    }