我读了这篇文章:https://docs.microsoft.com/en-us/archive/blogs/ericlippert/foreach-vs-foreach
文章说:
第一个原因是,这样做违反了所有其他序列操作符所基于的函数式编程原则.显然,调用此方法的唯一目的是引起副作用.表达式的目的是计算值,而不是引起副作用.陈述的目的是为了引起副作用.这个东西的调用点看起来非常像一个表达式(尽管,不可否认,因为该方法是返回空值的,所以该表达式只能在"语句表达式"上下文中使用).我不适合使用一个也是唯一一个只对其副作用有用的序列运算符.
但我认为我应该执行语句(返回空值的方法),如日志(log)记录、呈现用户界面、写入物理磁盘等. 这项工作不能用‘功能’的方式来完成吗?
var list = new List<SomeClass>();
var query = list.Where(...).. some 'functional'-feeling combined function chains;
foreach (var log in query)
Console.WriteLine(log); // this is the 'right' way?
query.MyForEach(log => Console.WriteLine(log)); // this works, but violates functional programming principles
综上所述,根据函数式编程原理,我如何处理会产生副作用的工作?