创建一个填充了对象的新实例的列表
创建具有相同对象的任意数量实例的列表的最佳方法是什么? 即是否有更紧凑或有效的方式来做到以下几点?
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
我确认他们都像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()); } } }