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

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

概述如果我有以下代码: List<MyClass> list = GetList();list.ForEach(i => i.SomeMethod()); 让我们说SomeMethod()抛出一个异常. ForEach继续迭代,还是只是停在那里? 如果它确实终止,有没有办法让集合中的其余项目运行他们的方法? 是的,如果抛出异常,则循环退出.如果您不想要这种行为,则应将异常处理放入您的委托中.您可以轻 如果我有以下代码:
@R_502_6818@<MyClass> @R_502_6818@ = Get@R_502_6818@();@R_502_6818@.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.

总结

以上是内存溢出为你收集整理的c# – 如果在List.ForEach中抛出异常,迭代是否会停止?全部内容,希望文章能够帮你解决c# – 如果在List.ForEach中抛出异常,迭代是否会停止?所遇到的程序开发问题。

如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。

欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/langs/1247208.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-06-07
下一篇 2022-06-07

发表评论

登录后才能评论

评论列表(0条)

保存