我正在考虑替换如下代码:
foreach (var meshCut in meshCuts0)
{
ComputePolygons(meshCut, polygons);
}
foreach (var meshCut in meshCuts1)
{
ComputePolygons(meshCut, polygons);
}
linq 看起来像这样:
meshCuts0.Concat(meshCuts1).ForEach(m => ComputePolygons(m, polygons));
我不知道 linq 是如何实现的,所以我不确定性能后果。我会很感激一些帮助。
1)
Concat 将创建一个列表副本还是只是一个枚举器执行以下操作:
public static IEnumerable<T> Concat<T>(IEnumerable<T> a, IEnumerable<T> b)
{
foreach (var t in a)
{
yield return t;
}
foreach (var t in b)
{
yield return t;
}
}
2)
这会是 Mono 上的相同行为吗?
3)
是否有任何参考解释如何为性能意识实现 linq api 函数?
谢谢!
编辑
好的,没有 ForEach 所以假设我也定义了这样的东西:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach(T item in source)
action(item);
}
真正的问题是,Concat 是否会因为精简代码而成为代价高昂的开销,多亏了评论,我现在明白事实并非如此。
编辑 2
啊,Jon Skeet 建议不要添加 ForEach ......所以我不会!
http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx