如何从父函数中捕获子过程异常?

时间:2016-06-15 10:10:13

标签: c# exception foreach

我有

public void ParentFunction()
{
   try
   {
      foreach (var item in someArray)
      {
         procedure1();
         procedure2();
         procedure3();
      }
   }
   catch(Exception exc)
   {
      console.Writeline(exc.Message);
   }
}

在每个程序中,我都尝试捕获异常处理。 如何在ParentFunction中捕获任何过程的异常?基本上,当抛出任何过程中的任何异常时,我需要将foreach项跳到下一个

5 个答案:

答案 0 :(得分:2)

例如,使用您的父类

public void ParentFunction()
{
   try
   {
      foreach (var item in someArray)
      {
         try 
         {
            procedure1();
            procedure2();
            procedure3();
         }
         catch(Exception exc)
         {
            continue;
         }

      }
   }
   catch(Exception exc)
   {
      console.Writeline(exc.Message);
   }
}

在程序中显式抛出异常,因此例如在procedure1中显式抛出特定异常。

throw new FaultException // Sample exception only

循环中的try-catch将捕获此异常并忽略它并继续下一次迭代。

但是,我不知道为什么你没有正确处理异常,只是忽略它们。

答案 1 :(得分:1)

我认为这可以帮到你:

    public void ParentFunction()
    {
      try
      {
         foreach (var item in someArray)
         {
           //If an error occurred in flowing Try-Catch Skip
           // and foreach go to next item
           try
           {
               procedure1();
               procedure2();
               procedure3();
           }
           catch(Exception exc)
           {
                //Here you can Handle your procedures error
                console.Writeline(exc.Message);
           }
         }
      }
      catch(Exception exc)
      {
         console.Writeline(exc.Message);
      }
    }

答案 2 :(得分:1)

您可以尝试这样的事情

public void ParentFunction()
{
    foreach (var item in someArray)
    {
        if(!TryExecute(procedure1())
            continue;
        if(!TryExecute(procedure2())
            continue;

        TryExecute(procedure3());   
    }   
}

public bool TryExecute(Action action)
{
    try
    {
        action.Invoke();
        return true;
    }
    catch(Exception exc)
    {
      console.Writeline(exc.Message);
      return false;
    }
}

答案 3 :(得分:1)

首先,如果您需要有关ParentFunction()中抛出异常的信息,您只需要从子过程中抛出异常,ParentFunction()将捕获它。

在你的问题中,我假设你所需要的只是让你的程序成为一个布尔函数,如果返回true则转到下一个子函数,否则使用continue; 。 (如果child_function内部出现问题而不是抛出异常,则返回false。

public void ParentFunction()
{
   try
   {
      foreach (var item in someArray)
      {
         if( ! child_function1())
            continue;
         if( ! child_function1())
            continue;
         child_function3();
      }
   }
   catch(Exception exc)
   {
      console.Writeline(exc.Message);
   }
}

答案 4 :(得分:0)

您可以使用其他方法初始化对象的一部分:

class Baseclass
{
    public virtual void callingbasefuntion()
    {
        throw new caughtexecption();
    }  
}

class Derivedclass : Baseclass
{
    public override void Initialize()
    {
        try
        {
            base.callingbasefuntion();
        }
        catch (caughtexecption)
        {
            ...
        }
    }
}

var object = new Derivedclass ();
object.callingbasefuntion();