2009-02-20 31 views
2

我正在使用JScript.NET在我編寫的C#WinForms應用程序中編寫腳本。它工作得很好,但我只是嘗試在腳本中添加一些異常處理,而我無法弄清楚如何判斷我的C#代碼拋出了哪種類型的異常。JScript.NET可以區分不同的.NET異常類型

下面是一些引發兩種不同類型的CLR異常的示例JScript代碼,然後嘗試捕獲它們並將它們分開。

function ErrorTest(name) 
{ 
    try 
    { 
     if (name.length < 5) 
     { 
      throw new ArgumentException(); 
     }else 
     { 
      throw new InvalidOperationException(); 
     } 
    }catch (e) 
    { 
     return e.name + " " + (e.number & 0xFFFF) + ": " + e.message; 
    } 
} 

如果我打電話ErrorTest("foo"),然後我回去"Error 5022: Value does not fall within the expected range.",如果我叫ErrorTest("foobar"),然後我回去"Error 5022: Operation is not valid due to the current state of the object."

姓名和號碼的屬性是相同的,唯一不同的是該消息。我不想根據錯誤消息開始編寫錯誤處理邏輯,那麼是否有某種方法可以獲取原始異常而不是JScript Error對象?

回答

3

使用的JScript .NET的類型註解支持,就像這樣:

try { } 
    catch (e : ArgumentException) { 
    // ... 
    } 
-1

你應該能夠做到:

function ErrorTest(name) 
{ 
    try 
    { 
     if (name.length < 5) 
     { 
      throw new ArgumentException(); 
     }else 
     { 
      throw new InvalidOperationException(); 
     } 
    } 
    catch (ArgumentException e) 
    { 
     return "Argument Exception: " + e.message; 
    } 
    catch (InvalidOperationException e) 
    { 
     return "Operation Exception: " + e.message; 
    } 
    catch (e) 
    { 
     return "Unknown Exception: " + e.message; 
    } 
} 

,並做不同的錯誤處理,每種類型的異常的方式。

+0

謝謝,但樣品JScript代碼,所以catch語句不允許一個異常類型。我似乎被允許的是一個變量名。 – 2009-02-20 19:13:28

+0

好點。您可以拋出新的錯誤(數字,「MessageString」)並測試數字。我認爲你可能會試圖從JScript中操縱CLR異常。 – 2009-02-20 21:48:58

0

您可以使用ErrorObject.ToException method獲得原始例外,然後使用instanceof來決定如何處理它。

這是有效的,但我還沒有決定是否使用它。我認爲這是濫用框架,因爲文檔說:

此API支持.NET Framework基礎結構,不適合在代碼中直接使用。

此外,您必須添加對Microsoft.JScript程序集的引用並導入Microsoft.JScript命名空間。

這裏的新代碼:

function ErrorTest(name) 
{ 
    try 
    { 
     if (name.length < 5) 
     { 
      throw new ArgumentException(); 
     }else 
     { 
      throw new InvalidOperationException(); 
     } 
    }catch (e) 
    { 
     var ex = ErrorObject.ToException(e); 
     if (ex instanceof ArgumentException) 
     { 
      return "bad argument"; 
     } 
     return "something bad"; 
    } 
} 
+0

我在此留下供參考,但接受的答案顯然要好得多。 – 2009-06-30 22:03:49

相關問題