【发布时间】:2012-06-26 18:24:20
【问题描述】:
免责声明:这个问题是出于我个人的好奇心,而不是完成某事的实际需要。所以我的例子是人为的。 不过,我认为这是一个很可能会出现的问题。
假设我们正在使用Zip 迭代两个序列,调用一个 void 方法,如果发现这对中的一项与另一项不同(因此丢弃任何返回值),该方法只会引发异常。这里的重点不是该方法抛出异常,而是它返回 void。
换句话说,我们有点像在两个集合上做一个ForEach(顺便说一句,我知道Eric Lippert thinks about 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;
});
【问题讨论】: