我想忽略一组语句中的特定类型的异常;无需在它们周围放置空Try..Catch
。
try{ o1.Update(); } catch (Exceptions.NoChangeMade ex) {}
try{ o2.Update(); } catch (Exceptions.NoChangeMade ex) {}
try{ o3.Update(); } catch (Exceptions.NoChangeMade ex) {}
我想要一种On Error Resume
类型的方式,或者在捕获中的Continue
方式
答案 0 :(得分:4)
这是一个简单的方法:
ExecuteIgnore(o1.Update);
ExecuteIgnore(o2.Update);
ExecuteIgnore(o3.Update);
...
private static void ExecuteIgnore(Action action)
{
try { action(); }
catch(Exceptions.NoChangeMade) { }
}
你可以使它更通用(如果更长一点),如下所示:
ExecuteIgnore<Exceptions.NoChangeMade>(o1.Update);
ExecuteIgnore<Exceptions.NoChangeMade>(o2.Update);
ExecuteIgnore<Exceptions.NoChangeMade>(o3.Update);
...
public static void ExecuteIgnore<T>(Action action) where T : Exception
{
try { action(); }
catch(T) { }
}
答案 1 :(得分:3)
如果你想让它们全部更新,你没有包装异常就没有选择。
您可以执行以下操作:
var list = List<objects_to_update> ();
list.Add(o1);
list.Add(o2);
etc.
list.ForEach(x=>
try{list.Update()}
catch{}
);
你仍然需要将它们包装在异常中,但至少这样你只需要编写一次。
答案 2 :(得分:1)
这些o1,o2,o3对象是否相关?你能把它们放在一个集合或数组中吗?
如果你这样做,你可以修改你的代码以使用循环来更新项目,然后你可以让空的catch块有效地将控制权传递给循环的下一次迭代。
一些伪代码说明:
foreach(DataTypeOfO o in CollectionOfOs)
{
try
{
o.Update();
}
catch(Exceptions.NoChangeMade ex)
{ }
}
答案 3 :(得分:0)
如果o1 / o2 / o3都是同一个类,那么在.Update()方法中放入1 try catch来捕获您正在寻找的特定异常。或者更好的是,更改代码,以便它根本不会抛出异常。