Вариант 1 - логическая операция ядра. В .NET 4.0 вы можете выполнить ту же операцию, что и в варианте 2, используя оператор Zip. Из памяти вместо:
var newPoints = Offset(firstPoints, secondPoints);
вы бы написали:
var newPoints = firstPoints.Zip(secondPoints, (p1, p2) => Offset(p1, p2));
Возможно, вы захотите сделать Offset
методом расширения для Point3
, если вы также используете .NET 3.5. (В качестве альтернативы, если вы управляете типом Point3
, это звучит как логическое дополнение - было бы неплохо написать (p1, p2) => p1 + p2
в вызове Zip
.
Если вы не используете .NET 4.0, но вам нравится Zip
, у нас есть реализация в MoreLINQ - это довольно просто.
Пока что ничего не было связано с многопоточностью ... сейчас я не знаю, есть ли реализация PLINQ Zip
в .NET 4.0, но было бы целесообразно, чтобы она была, IMO .