我有List
个MyType1
个对象。我想在List
个MyType2
个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);
}
个对象作为参数。
现在,我这样做:
{{1}}
有没有办法做到这一行(我想也许Linq可以做到这一点)?
答案 0 :(得分:7)
var type2objects = type1objects.Select(o => new MyType2(o)).ToList();
答案 1 :(得分:3)
您可以使用Select()
与Linq进行简单投影,然后使用ToList()
从此枚举中创建一个列表:
var type2objects = type1objects.Select( x => new MyType2(x))
.ToList();
答案 2 :(得分:1)
var type2objects = type1objects.Select(type1obj => new MyType2(type1obj)).ToList();
答案 3 :(得分:0)
你应该可以这样做:
List<MyType2> list2 = new List<MyType2>(list1.Select(x => new MyType2(x)));
答案 4 :(得分:0)
如果您只是将list1中的所有元素复制到list2,您将不获取这些元素的真实副本。你将只有另一个包含相同元素的列表!!!
答案 5 :(得分:0)
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
不需要中间调整大小。
有人会称之为过早优化,而且确实如此。但你可能需要它。
答案 6 :(得分:0)
您可能还会从Convert.ChangeType()获得一些里程,具体取决于您要转换的内容:
List<MyType2> type2objects = type1objects.Select(
type1object => Convert.ChangeType(type1object, typeof(MyType2))
).ToList();