c# – 如果在List.ForEach中抛出异常,迭代是否会停止?

如果我有以下代码
List<MyClass> list = GetList();
list.ForEach(i => i.SomeMethod());

让我们说SomeMethod()抛出一个异常. ForEach继续迭代,还是只是停在那里?

如果它确实终止,有没有办法让集合中的其余项目运行他们的方法

解决方法

是的,如果抛出异常,则循环退出.如果您不想要这种行为,则应将异常处理放入您的委托中.您可以轻松地为此创建一个包装器方法
public static Action<T> SuppressExceptions<T>(Action<T> action)
{
    return item =>
    {
        try
        {
            action(item);
        }
        catch (Exception e)
        {
            // Log it,presumably
        }
    };
}

说实话,如果可能的话,我会尽量避免这种情况.抓住所有这样的例外是令人不愉快的.它也不记录失败的项目或异常等.您需要更详细地考虑您的要求:

>您需要收集失败的物品吗?
>您需要收集例外情况吗?
>您想要捕获哪些例外?

创建一个单独的方法,使用正常的foreach循环,处理错误并收集错误,几乎肯定会更清晰.就个人而言,我通常更喜欢使用foreach而不是ForEach – 你可能希望阅读Eric Lippert’s thoughts on this too.

相关文章

在项目中使用SharpZipLib压缩文件夹的时候,遇到如果目录较深,则压缩包中的文件夹同样比较深的问题。比...
项目需要,几十万张照片需要计算出每个照片的特征值(调用C++编写的DLL)。 业务流程:选择照片...
var array = new byte[4]; var i = Encoding.UTF8.GetBytes(100.ToString(&quot;x2&quot;));//...
其实很简单,因为Combox的Item是一个K/V的object,那么就可以把它的items转换成IEnumerable&lt;Dic...
把.net4.6安装包打包进安装程序。 关键脚本如下: 头部引用字符串对比库 !include &quot;WordFunc....
项目需求(Winform)可以批量打印某个模板,经过百度和摸索,使用iTextSharp+ZXing.NetʿreeSp...