您列出的每种方法的开销都非常低。我会选择最易读的,IMO 与Select
. 否则就是过早的优化。
IList<NewT> newList = oldList.Select(transformer.transform).ToList();
(x => transformer.transform(x)
可以在这样的上下文中简单地写,因为该方法与需要transformer.transform
兼容,Func<,>
感谢Jeppe注意到这里)Select
但是,如果您分析了您的应用程序并发现您在此 LINQ 代码上花费了大量时间(不仅仅是transform
部分),那么最快的方法可能是for
自己编写一个循环(无论是内联还是其他方法应该不重要,我希望 JITter 在运行时内联它,或者有这么小的开销,这无关紧要)。
IList<NewT> newList = new List<NewT>(oldList.Count);
for (int i = 0; i < oldList.Count; i++)
newList[i] = transformer.transform(oldList[i]);
但是,我发现这不太可能,因为与 LINQ 相比,从数据库中提取实体和自动映射非常缓慢。