我有TypeA和B这样:
class TypeA
{
prop 1;
prop 2;
prop 3;
prop 4;
...
prop 15;
}
class TypeB
{
prop a;
prop b;
prop c;
...
prop p;
}
TypeB的每个属性值都将通过操纵TypeA的某些属性来构造。
现在我需要做类似
的事情List<TypeB> list= SomeConverter(List<TypeA>);
源列表可能包含大约5000个对象。
我想知道最快的方法。代码可读性不是我关注的问题。
我需要映射的类型很少。
谢谢
答案 0 :(得分:2)
您将无法避免将TypeA
的每个实例转换为TypeB
的实例的成本,但您可以通过设置初始容量来避免调整列表大小的成本:< / p>
List<TypeB> listB = new List<TypeB>(listA.Count);
listB.AddRange(listA.Select(SomeConverter));
TypeB SomeConverter(TypeA input)
{
return new TypeA() { ... };
}
或者这样,性能稍好一点:
List<TypeB> listB = new List<TypeB>(listA.Count);
foreach(var a in listA)
{
listB.Add(SomeConverter(a));
}
当然,在许多情况下,最大的表现来自于首先过度使用列表。例如,在调用Linq查询时调用ToList()
会强制立即计算查询,并将结果保存到List<T>
。相反,如果您可以将评估推迟到最晚,您通常会避免大部分最昂贵的处理。通常,除非您确实需要对集合进行动态插入/删除,否则几乎可以肯定应该避免使用列表。
答案 1 :(得分:1)
AutoMapper对于这种情况来说是一个不错的库,没有在大量的列表中尝试它,试一试。