【发布时间】:2013-08-09 23:01:41
【问题描述】:
我有一个方法,它接受 N,我要创建的对象的数量,我需要返回 N 个对象的列表。
目前我可以用一个简单的循环来做到这一点:
private static IEnumerable<MyObj> Create(int count, string foo)
{
var myList = new List<MyObj>();
for (var i = 0; i < count; i++)
{
myList .Add(new MyObj
{
bar = foo
});
}
return myList;
}
我想知道是否还有其他方法,也许使用 LINQ 来创建这个列表。
我试过了:
private static IEnumerable<MyObj> CreatePaxPriceTypes(int count, string foo)
{
var myList = new List<MyObj>(count);
return myList.Select(x => x = new MyObj
{
bar = foo
});
}
但这似乎确实填充了我的列表。
我尝试将选择更改为 foreach,但它的处理相同。
我意识到该列表具有 容量 的 count 并且 LINQ 没有找到任何要迭代的元素。
myList.ForEach(x => x = new MyObj
{
bar = foo
});
是否有正确的 LINQ 运算符可用于使其工作?还是我应该坚持循环?
【问题讨论】:
-
LINQ 是一个查询工具,不应该过度使用它来创建对象
-
像
.Select()这样的Linq 运算符纯粹用于查询集合并将它们投影到所需的形式;他们不打算做任何改变原始设置的事情。不建议您尝试使用.Select()做什么,尽管它可以工作。我会坚持循环。 -
如果你想增加趣味,你可以使用
yield return new MyObj(){ ... };而不是保存临时列表 -
MyObj[100].AsEnumerable()不行吗?