是否LINQ有序列运算符,它允许对每个元素执行某些操作而不将其投影到新序列?
这可能看起来有点尴尬,但只是让我知道:)
例:
IEnumerable<IDisposable> x;
x.PERFORM_ACTION_ON_EVERY_ELEMENT(m => m.Dispose());
Run Code Online (Sandbox Code Playgroud)
显然,这可以通过以下方式完成:
foreach (var element in x) x.Dispose();
Run Code Online (Sandbox Code Playgroud)
但如果事实确实存在,那就太好了.
不,它不存在.特别是你提到的原因:单个操作员的行为与其他操作员完全不同似乎很尴尬.
C#Compiler开发人员之一的Eric Lippert 有一篇关于此的文章.
但我们可以在这里更深入一点.出于两个原因,我在哲学上反对提供这样的方法.
第一个原因是这样做违反了所有其他序列运算符所基于的函数式编程原则.显然,调用此方法的唯一目的是引起副作用.
表达式的目的是计算一个值,而不是引起副作用.声明的目的是产生副作用.这个东西的调用站点看起来很像一个表达式(但是,诚然,由于该方法是void返回的,因此表达式只能用于"语句表达式"上下文.)
对我来说,制作唯一一个仅对其副作用有用的序列运算符并不合适.