如何通过LINQ一次性向List<ClassA>中添加多个类对象?
正确实现一次性向
List<ClassA>添加多个对象的方法 首先得说清楚你原来代码出错的核心原因:List<T>.Add()方法一次只能接收一个参数,你直接在Add里传了两个new ClassA()对象,这就触发了"No overload for method 'Add' takes 2 arguments"的错误;另外你对ForEach的用法也有偏差——它是遍历集合里的每个元素执行操作,不是一次性把多个元素塞给Add。
下面给你几种靠谱的实现方式:
方法1:用AddRange(最推荐,效率更高)
List<T>自带的AddRange方法就是专门用来一次性批量添加元素的,不需要绕LINQ的ForEach,写法简洁还高效:
直接添加多个新建的ClassA对象
List<ClassA> _ListClassA = new List<ClassA>(); // 直接创建要添加的元素集合,传给AddRange _ListClassA.AddRange(new List<ClassA> { new ClassA(), new ClassA(), // 可以继续添加更多对象 });
从现有集合转换后添加(比如你的Enumerablelist)
如果Enumerablelist是一个需要转换为ClassA的集合,用LINQ的Select转换后再传给AddRange:
// 假设Enumerablelist里的每个x需要用来初始化ClassA的属性 _ListClassA.AddRange(Enumerablelist.Select(x => new ClassA() { // 这里可以用x的属性给ClassA赋值,比如: // Name = x.UserName, // Id = x.UserId }));
方法2:用ForEach遍历添加(适合需要逐个处理元素的场景)
如果你确实想用LINQ的ForEach,那得保证每次循环只调用一次Add,传一个元素:
遍历预创建的元素集合
var itemsToAdd = new List<ClassA> { new ClassA(), new ClassA() }; itemsToAdd.ForEach(item => _ListClassA.Add(item));
遍历Enumerablelist并逐个创建添加
Enumerablelist.ForEach(x => { // 每个x对应创建一个ClassA对象并添加到列表 _ListClassA.Add(new ClassA() { // 用x的属性初始化当前ClassA对象 }); });
小提示
优先用AddRange,因为它会一次性为新元素分配足够的内存,比多次调用Add(每次可能触发列表扩容)的性能好很多,尤其是添加大量元素的时候。
内容的提问来源于stack exchange,提问作者Maharshi
相关产品推荐
相关产品推荐

