5
Для жизни я не могу понять, почему все foos не равны нулю. Я предполагаю, что .ForAll()
должен выполняться до того, как я вызову метод .All()
, но это не так?Параллельный LINQ - .Select() + .ForAll(), возвращающий причудливые результаты
public class Foo
{
public string Bar { get; set; }
}
static void Main(string[] args)
{
var foos = new List<Foo> { new Foo(), new Foo(), new Foo() };
var newFoos = foos
.AsParallel()
.Select(x =>
{
x.Bar = "";
return x;
});
newFoos.ForAll(x => x = null);
var allFoosAreNull = newFoos.All(x => x == null);
Console.WriteLine(allFoosAreNull); // False ??
}
Даже если я изменяю тело лямбды, чтобы установить свойство «Bar» другому значению, это значение также не сохраняется. Я все еще немного озадачен; Я полагаю, что 'ForAll()' выполняет итерирование по фактическому списку. Другими словами, почему лямбда * не * была 'ref'? –
Теперь, когда я думаю об этом, это даже не имеет никакого отношения к PLINQ ... это такое же поведение с '.ForEach()'. –