我如何在c#中不使用foreach将一个列表中包含的项目转移到另一个列表中?
当前回答
这里有另一种方法,但它比其他方法差一点。
List<int> i=original.Take(original.count).ToList();
其他回答
此方法将创建列表的副本,但您的类型应该是可序列化的。
使用:
List<Student> lstStudent = db.Students.Where(s => s.DOB < DateTime.Now).ToList().CopyList();
方法:
public static List<T> CopyList<T>(this List<T> lst)
{
List<T> lstCopy = new List<T>();
foreach (var item in lst)
{
using (MemoryStream stream = new MemoryStream())
{
BinaryFormatter formatter = new BinaryFormatter();
formatter.Serialize(stream, item);
stream.Position = 0;
lstCopy.Add((T)formatter.Deserialize(stream));
}
}
return lstCopy;
}
很容易映射不同的列表集由linq没有for循环
var List1= new List<Entities1>();
var List2= new List<Entities2>();
var List2 = List1.Select(p => new Entities2
{
EntityCode = p.EntityCode,
EntityId = p.EntityId,
EntityName = p.EntityName
}).ToList();
public static List<string> GetClone(this List<string> source)
{
return source.Select(item => (string)item.Clone()).ToList();
}
添加到顶部的答案,如果你想要“列表中的对象”的副本,那么你可以使用Select并创建副本。(其他答案构成“a copy of a list”,而这个答案构成“a list of copies”)。
假设你的项目有一个Copy方法:
List<MyObject> newList = oldList.Select(item => item.Copy()).ToList();
或者你可以用构造函数从之前的对象中创建一个新对象:
List<MyObject> newList = oldList.Select(item => new MyObject(item)).ToList();
Select的结果是一个IEnumerable<MyObject>,你也可以传递给AddRange,例如,如果你的目标是添加到一个现有的列表。
你可以试试这个:
List<Int32> copy = new List<Int32>(original);
或者如果你使用c# 3和。net 3.5,使用Linq,你可以这样做:
List<Int32> copy = original.ToList();
我看到这个答案仍然得到了点赞。好吧,这里有一个秘密给你:上面的答案仍然是使用一个foreach。请不要再投票了。
推荐文章
- i++和++i的区别是什么?
- 可空对象必须有一个值
- 按类型查找WPF窗口中的所有控件
- 为什么我不能继承静态类?
- 合并两个PHP对象的最佳方法是什么?
- 数组与列表的性能
- 如何在c#中获取CPU的使用情况?
- BindingFlags。IgnoreCase不为Type.GetProperty()工作?
- 使用私有静态方法的优点
- 一个任务被取消了?
- 新DateTime()与默认值(DateTime)
- 为什么这个迭代的列表增长代码给出IndexError:列表赋值索引超出范围?如何重复添加(追加)元素到列表?
- 从Description属性中获取Enum
- 从包含文件名的路径获取不包含文件名的完整路径
- 如何从字符串的开始或结束删除所有空白?