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

创建具有相同对象的任意数量实例的列表的最佳方法是什么? 即是否有更紧凑或有效的方式来做到以下几点?

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

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

这不是很难实现的迭代器:

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

编辑反映这种方法不起作用

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

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

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

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

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

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