2016-12-01 22 views
-1

カスタム例外ハンドラをC#で作成しました。例外が発生した場合に、そのユーザーに対して読み取り可能なメッセージを表示します。カスタム例外ハンドラC#

私はそれにHRESULT値の保留例外を指定しようとしましたが、私はHRESULT値を示している、私は見ていない問題、および指定された例外を持って

class UiException : Exception 
{ 
    public string Errormessage { get; set; } 
    public UiException(Exception e) 
    : base() 
    { 
     string exName = e.Source; 
     int errorNumber = e.HResult; 
     if (e.HResult == -2146233080) 
      Errormessage = "Index was outside the bounds of the array."; 

}  
} 
+0

申し訳ありませんか?もしそうなら、MessageBox.Show()を見てください。 – LordWilmore

+0

保留中の例外がすべて発生する可能性があります。 –

+0

@AhmedElBatrawy - これは例外の定義です。これは例外ハンドラではありません。これは 'try' /' catch'の一部です。 – Enigmativity

答えて

0

あなたが使用したくありません例外識別のためのHRESULT。 HRESULTは主にCOM interop用であり、.NETではほとんど使用されていません。私は以下をお勧めします:

  1. あなたのカスタムエラーメッセージを理解するために、基本例外のタイプを使用してください。あなたは.NETにとどまり、柔軟性があります。柔軟性の主な利点は、フォールバックを定義することなく、他の例外から派生した例外を簡単にカバーできることです。また、asキャストを使用すると、例外の詳細情報(:ArgumentExceptionなど)を簡単に抽出できます。
  2. 基本例外を内部例外にします。内部例外は、 時間 の夜明け以来存在しており、したがって広くサポートされています。ロギングまたはデバッグ用です。エラーの原因を守ることは、エラー分析や一般的なベストプラクティスにも役立ちます。
  3. Errormessageプロパティは絶対に必要ありません。あなたの目的に合った(内部の例外と同様に)広くサポートされているプロパティがあります。

だからあなたのカスタム例外は、より次のようになります。私はこれを誤解しましたが、あなたはオペレータにこれを提示する方法を求めている場合

class UIException : Exception 
{ 
    public UIException(Exception baseException) : 
     base(GetErrorMessage(baseException), baseException) 
    { 
    } 

    private static GetErrorMessage(Exception baseException) 
    { 
     if (baseException is IndexOutOfRangeException) 
     { 
      return "Index was outside the bounds of the array."; 
     } 
     else if (exception is InvalidOperationException) 
     { 
      //Return exception message 
     } 
     //... more else if in the chain 
     else 
     { 
      return baseException.Message; 
     } 
    } 
} 
関連する問題