@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中抛出异常,迭代是否会停止?所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)