创建一个填充了对象的新实例的列表

时间:2013-07-25 17:46:16

标签: c# linq list

使用同一对象的任意数量的实例创建列表的最佳方法是什么?那么有更紧凑或有效的方法来做以下事情吗?

static List<MyObj> MyObjs = Enumerable.Range(0, 100)
    .Select(i => new MyObj())
    .ToList();

Enumerable.Repeat会给我十个同一个对象的引用,所以我觉得它不会起作用。)

4 个答案:

答案 0 :(得分:8)

这不会很难实现为迭代器:

IEnumerable<T> CreateItems<T> (int count) where T : new() {
    return CreateItems(count, () => new T());
}

IEnumerable<T> CreateItems<T> (int count, Func<T> creator) {
    for (int i = 0; i < count; i++) {
        yield return creator();
    }
}

答案 1 :(得分:7)

编辑反映此方法有效。

我对你对Enumerable.Repeat的评论感到好奇,所以我试了一下。

List<object> myList = Enumerable.Repeat(new object(), 100).ToList();

我确认他们都像OP提到的那样共享相同的参考文献。

答案 2 :(得分:3)

显然,答案是“不”。谢谢大家!

答案 3 :(得分:2)

在这种情况下,不确定for循环有什么问题。至少,我们可以预先确定清单的容量。这可能对100个对象不重要,但大小是任意的。

public class MyClass
{
    static int Capacity = 100;
    static List<MyObj> MyObjs = new List<MyObj>(Capacity);

    static MyClass() {
       for( var i = 0; i < Capacity; i++ ) {
          MyObjs.Add(new MyObj());
       }
    }
}