创建N个对象并将它们添加到列表中

我有一个方法,它接受N,我想要创建的对象的数量,我需要返回N个对象的列表。

目前我可以用一个简单的循环来做到这一点:

private static IEnumerable Create(int count, string foo) { var myList = new List(); for (var i = 0; i < count; i++) { myList .Add(new MyObj { bar = foo }); } return myList; } 

我想知道是否有另一种方式,也许用LINQ来创建这个列表。

我试过了:

  private static IEnumerable CreatePaxPriceTypes(int count, string foo) { var myList = new List(count); return myList.Select(x => x = new MyObj { bar = foo }); } 

但这似乎填补了我的名单。

我尝试将选择更改为foreach但是同样的交易。

我意识到列表具有计数能力 ,LINQ没有找到任何要迭代的元素。

  myList.ForEach(x => x = new MyObj { bar = foo }); 

是否有正确的LINQ运算符可用于实现此function? 或者我应该坚持循环?

您可以使用Range创建序列:

 return Enumerable.Range(0, count).Select(x => new MyObj { bar = foo }); 

如果要创建List ,则必须对其进行ToList

但请注意,它(可以说)是一个非显而易见的解决方案,所以不要抛弃创建列表的迭代方法。

您可以创建通用辅助方法,如下所示:

 // Func: The int parameter will be the index of each element being created. public static IEnumerable CreateSequence(Func elementCreator, int count) { if (elementCreator == null) throw new ArgumentNullException("elementCreator"); for (int i = 0; i < count; ++i) yield return (elementCreator(i)); } public static IEnumerable CreateSequence(Func elementCreator, int count) { if (elementCreator == null) throw new ArgumentNullException("elementCreator"); for (int i = 0; i < count; ++i) yield return (elementCreator()); } 

然后你可以像这样使用它们:

 int count = 100; var strList = CreateSequence(index => index.ToString(), count).ToList(); string foo = "foo"; var myList = CreateSequence(() => new MyObj{ Bar = foo }, count).ToList(); 

您可以使用Enumerable.Repeat

 IEnumerable listOfMyObjetcs = Enumerable.Repeat(CreateMyObject, numberOfObjects); 

欲了解更多信息,请阅读https://msdn.microsoft.com/en-us/library/bb348899(v=vs.110).aspx