忽略特定类型的异常

时间:2010-06-04 16:37:51

标签: c# .net exception-handling

我想忽略一组语句中的特定类型的异常;无需在它们周围放置空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方式

4 个答案:

答案 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来捕获您正在寻找的特定异常。或者更好的是,更改代码,以便它根本不会抛出异常。