代码之家  ›  专栏  ›  技术社区  ›  Glennular

忽略特定类型的异常

  •  2
  • Glennular  · 技术社区  · 16 年前

    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 键入way或a Continue 很快就到了

    4 回复  |  直到 11 年前
        1
  •  3
  •   kemiller2002    16 年前

    如果你想让它们全部更新,你真的没有选择不包装例外。

    var list = List<objects_to_update> ();
    
     list.Add(o1);
     list.Add(o2);
     etc.    
    
    list.ForEach(x=>
      try{list.Update()}
      catch{}
     );
    

    您仍然需要将它们包装在一个异常中,但至少这样您只需编写一次。

        2
  •  4
  •   Joseph Sturtevant    16 年前

    这里有一个简单的方法:

    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) { }
    }
    
        3
  •  1
  •   Paddyslacker    16 年前

    这些o1,o2,o3物体是否相关?你能把它们放在一个集合或数组里吗?

    如果这样做,可以修改代码以使用循环来更新项,然后让空catch块有效地将控制传递给循环的下一个迭代。

    foreach(DataTypeOfO o in CollectionOfOs)
    {
        try
        {
              o.Update(); 
        }
        catch(Exceptions.NoChangeMade ex)     
        { }
    }
    
        4
  •  0
  •   DigitalNomad    16 年前

    如果o1/o2/o3都是同一个类,那么在.Update()方法中放入1 try catch以捕获您要查找的特定异常。或者更好的是,更改代码,使其根本不会抛出异常。