创建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
上述就是C#学习教程:创建N个对象并将它们添加到列表中分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1026122.html