使用同一对象的任意数量的实例创建列表的最佳方法是什么?那么有更紧凑或有效的方法来做以下事情吗?
static List<MyObj> MyObjs = Enumerable.Range(0, 100)
.Select(i => new MyObj())
.ToList();
(Enumerable.Repeat
会给我十个同一个对象的引用,所以我觉得它不会起作用。)
答案 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());
}
}
}