2015-11-29 60 views
0

我有麻煩了谷歌搜索這一點,所以這裏更多的信息是一個解釋:觀察錯誤而不返回錯誤值?裏面

我想執行的從另一個類,一個接一個方法的列表,並有我所有的錯誤處理髮生像一試捕獲方案。

事情是這樣的:

try 
{ 
    var thing1 = Worker.GetThing1(); //returns proper value, so continue 
    var thing2 = Worker.GetThing2(); //throws error with message 
    var thing3 = Worker.GetThing3(); //doesn't get done, stopped at 2 
} 
catch (ExceptionError errorMessage) 
{ 
    MessageBox.Show(errorMessage); 
} 

而且功能將類似於:

function GetThing1() 
{ 
    if (!success) 
    { 
     throw ExceptionError("this is an error message."); 
    } 
} 

的問題是我不知道如何從另一個類拋出異常,或者如果它甚至可能做到。

顯然,這是一些嚴重的僞代碼,所以如果我不夠清楚,請告訴我。

+0

看起來很好。除了Worker.GetThing1會拋出你的例子。 – Warty

+0

什麼是'ExceptionError'? –

+0

一切看起來都很好...可以請你詳細說明你的疑問。或者什麼不工作 – Kapoor

回答

0

感謝有識之士,我與我的原始代碼非常接近。以下是我結束了:

class Program 
{ 
    static void Main(string[] args) 
    { 
     var worker = new Worker(); 
     try 
     { 
      worker.GetThing1(); 
      worker.GetThing2(); 
      worker.GetThing3(); 
     } 
     catch (Exception errorMessage) 
     { 
      Console.WriteLine(errorMessage.Message); 
     } 
     Console.ReadKey(); 
    } 
} 

class Worker 
{ 
    public void GetThing1() 
    { 
     var success = true; 
     if (!success) 
     { 
      throw new Exception("This is an error message!"); 
     } 


    } 
    public void GetThing2() 
    { 

     var success = false; 
     if (!success) 
     { 
      throw new Exception("This is an error message!"); 
     } 

    } 
    public void GetThing3() 
    { 

     var success = true; 
     if (!success) 
     { 
      throw new Exception("This is an error message!"); 
     } 

    } 
} 

這是這麼多比試圖抓住一切if-else的更容易閱讀,更高效。謝謝!

1

我做了一個快速的控制檯應用程序來說明這一點。扔一個新的錯誤的語法是throw new Exception(message);代碼:

class Program 
{ 
    static void Main(string[] args) 
    { 
     try 
     { 
      var thing1 = Program.GetThing1(); //returns proper value, so continue 
      var thing2 = Program.GetThing2(); //throws error with message 
      var thing3 = Program.GetThing3(); //doesn't get done, stopped at 2 
     } 
     catch (Exception errorMessage) 
     { 
      Console.WriteLine(errorMessage.Message); 
     } 

     Console.ReadKey(); 
    } 

    private static bool GetThing1() 
    { 
     bool success = true; 

     if (!success) 
     { 
      // This will NOT be displayed in the console. 
      throw new Exception("GetThing1 Error -> Not supposed to see this in output..."); 
     } 

     return success; 
    } 

    private static bool GetThing2() 
    { 
     bool success = false; 

     if (!success) 
     { 
      // This WILL be displayed in the console. 
      throw new Exception("GetThing2 Error -> Expected, this has to be thrown!!!"); 
     } 

     return success; 
    } 

    private static bool GetThing3() 
    { 
     bool success = true; 

     if (!success) 
     { 
      // This will NOT be displayed in the console. 
      throw new Exception("GetThing3 Error - > Not supposed to see this in output..."); 
     } 

     return false; 
    } 
} 

的傢伙說,「一切看起來很好」,請測試你的陳述。另外,在.NET中沒有標準類叫做ExceptionError,你可以使用Exception類來捕捉所有類型的異常(但是海報稱他使用的是僞代碼,所以我們不能在這些小細節上敲打太多)。

+0

爲什麼你說*「這將不會顯示在控制檯」*? –

+0

可能是因爲它不會。 –

+0

它不會顯示在控制檯中,因爲if語句永遠不會允許它。 – Francois

1

我認爲你已經創建了自定義的異常類,如果你的getthings函數在diffrunt庫中比你應該把這個類移動到一些公共庫,你應該引用你的庫。