[英]Copy a list of objects to another typed list in one line of code
我有一个MyType1
对象List
。 我想在新的MyType2
对象List
中复制所有这些对象,具有MyType2
的构造函数,该构造函数将MyType1
对象作为参数。
现在,我这样做:
List<MyType1> type1objects = new List<MyType1>();
// Fill type1objects
// ...
List<MyType2> type2objects = new List<MyType2>();
foreach (MyType1 type1obj in type1objects) {
MyType2 type2obj = new MyType2(type1obj);
type2objects.Add(type2obj);
}
有没有办法做到这一行(我想也许Linq可能)?
var type2objects = type1objects.Select(o => new MyType2(o)).ToList();
您可以使用带Linq的Select()
进行简单投影,然后使用ToList()
从此枚举中创建一个列表:
var type2objects = type1objects.Select( x => new MyType2(x))
.ToList();
var type2objects = type1objects.Select(type1obj => new MyType2(type1obj)).ToList();
你应该可以做这样的事情:
List<MyType2> list2 = new List<MyType2>(list1.Select(x => new MyType2(x)));
如果您只是将list1中的所有元素复制到list2,那么您将无法获得这些元素的真实副本。 你将只有另一个具有相同元素的列表!
List<MyType2> type2objects = new List<MyType2>();
type2objects.AddRange(type1objects.Select(p => new MyType2(p)));
通过这种方式,您甚至可以保留type2objects
包含的值。
我要补充一点,你知道type1objects
的大小,所以你可以加速一点:
List<MyType2> type2objects = new List<MyType2>(type1objects.Count);
这里预先设置了type2objects
的容量。
或者,如果您正在重新使用“old2” type2objects
if (type2objects.Capacity < type1objects.Count + type2objects.Count)
{
type2objects.Capacity = type1objects.Count + type2objects.Count;
}
通过这种方式,您知道List
不需要中间调整大小。
有人会称之为过早优化,而且确实如此。 但你可能需要它。
您可能还会从Convert.ChangeType()获得一些里程,具体取决于您要转换的内容:
List<MyType2> type2objects = type1objects.Select(
type1object => Convert.ChangeType(type1object, typeof(MyType2))
).ToList();
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.