Do указывает, что некоторый побочный эффект будет иметь место при выполнении, и возвращает последовательность с побочными эффектами.
Run перечисляет последовательность и возвращает void.
Думайте об этом так:Делайте «теги» последовательности с побочными эффектами.Эти побочные эффекты будут иметь место только при перечислении последовательности.Do возвращает новую последовательность с побочными эффектами.
// Example of .Do
var elements = new[] { 1, 2, 3 };
var elementsWithSideEffects = elements.Do(e => MessageBox.Show(e)); // No Message Boxes shown yet!
elementsWithSideEffects.Run(); // 3 message boxes shown
Run, с другой стороны, перечисляет последовательность: Run () или, при желании, присоединяет побочные эффекты, затем перечисляет последовательность: Run (действие)
// Example of .Run with its own side effects:
var elements = new[] { 1, 2, 3 };
elements.Run(e => MessageBox.Show(e)); // 3 Message Boxes shown.