免责声明:这个问题是由我个人的好奇心驱动的,而不是实际需要完成某事。所以我的例子是人为的。尽管如此,我认为这是一个很可能会出现的问题。
假设我们正在使用Zip迭代两个序列,调用一个 void 方法,如果发现这对中的一项与另一项不同(因此丢弃任何返回值),该方法只会引发异常。这里的重点不是该方法抛出异常,而是它返回 void。
换句话说,我们做ForEach
了两个以上的系列(顺便说一下,我知道Eric Lippert 的想法ForEach
,并且完全同意他的观点,从不使用它)。
现在,Zip
想要一个Func<TFirst, TSecond, TResult>
,所以当然传递等效于的东西是Action<TFirst, TSecond>
行不通的。
我的问题是:有没有比这更好的惯用方式(即返回一个虚拟值)?
var collection1 = new List<int>() { ... };
var collection2 = new List<int>() { ... };
collection1.Zip(collection2, (first, second) =>
{
VoidMethodThatThrows(first, second);
return true;
});