1

我有这样的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 个对象。

我想知道最快的方法来做到这一点。代码可读性不是我关心的。

我需要映射的此类类型很少。

谢谢

4

2 回答 2

2

您将无法避免将 的每个实例转换TypeA为 的实例TypeB的成本,但您可以通过设置初始容量来避免调整列表大小的成本:

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));
}

当然,在许多情况下,最大的性能首先来自于过度使用列表。例如,ToList()在调用 Linq 查询时调用会强制立即评估查询,并将结果保存到List<T>. 相反,如果您可以将评估推迟到尽可能晚,您通常会避免大部分最昂贵的处理。一般来说,除非您真的需要对集合进行动态插入/删除,否则您几乎可以肯定应该避免使用列表。

于 2013-08-03T15:07:57.253 回答
1

AutoMapper对于这种情况来说是一个不错的库,没有在大量列表中尝试过,试一试。

于 2013-08-03T15:12:14.207 回答