使用默认值填充List <int>?</int>

时间:2010-07-29 15:04:30

标签: c# list

  

可能重复:
  Auto-Initializing C# Lists

我有一个具有一定容量的整数列表,我希望在声明时自动填充。

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

是否有更简单的方法来填充此列表,其中10个int具有int的默认值,而不是循环并添加项目?

5 个答案:

答案 0 :(得分:115)

好吧,你可以让LINQ为你做循环:

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

目前还不清楚“默认值”是指0还是自定义默认值。

你可以通过创建一个数组来提高效率(执行时间;内存更差):

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

这将从数组块中复制到列表中,这可能比ToList所需的循环更有效。

答案 1 :(得分:10)

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

答案 2 :(得分:7)

如果你有一个固定长度的列表,并且你希望所有的元素都有默认值,那么你可能应该使用一个数组吗?

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();

答案 3 :(得分:2)

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

答案 4 :(得分:1)

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

添加

以下是获取默认值列表的通用方法:

    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]);
    }