2016-06-15 37 views
1

如何從父函數捕獲子程序異常?

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

在每一個環節我的try-catch異常處理。 如何在ParentFunction中捕獲任何過程的異常?基本上,我需要的foreach項跳到下一個時,在任何程序中的任何異常被拋出

回答

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

,我認爲這可以幫助你:

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); 
     } 
    } 
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; 
    } 
} 
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(); 
1

的所有所有,如果您需要了解在ParentFunction拋出的異常信息( )你只需要拋出一個子程序的異常,並且ParentFunction()會捕獲它。

在現在你的問題,我認爲你需要的是讓你的程序將布爾函數,如果返回true轉到下一個子功能,否則繼續使用; 。 (如果出現錯誤內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); 
    } 
}