0

Exceptionメッセージと の両方をパラメーターとして受け取るクラスが必要でありint、独自のカスタム派生例外を作成する代わりに、既存のクラスを使用したいと考えています。

ずっと探していたのですが、思った以上に難しそうです。

そのような(一般的に名付けられた)クラスはありますか?

編集

私はそれをキャッチして表示するつもりです: "Error " + ex.Message + ex.Code.ToString();.

エラーコードは、ユーザーに表示したくないメッセージ用です。(デバッグなどの技術的なもの。エラーコード 表示されるので、ユーザーはどのコードを取得したかを知ることができます。)

私が既存の Exception を好む理由は、すべてのアプリケーションで例外を処理する統一された方法が必要であり、例外を毎回定義する必要がないようにしたいからです。

4

3 に答える 3

5

既に述べたように、最善の方法は、アプリケーション ドメインに対して 1 つ以上の特別な例外クラスを作成することです。優れたデザインには、優雅に分解するための規定も含まれています。

しかし、もう 1 つのルートがあります。基本 Exception クラスのめったに使用されないDataプロパティです。

これは、任意の例外にカスタム データを追加できるディクショナリです。例外をインターセプト (キャッチして再スロー) し、アンビエント情報を追加したい場合に便利です。

try 
{
    using (var reader = File.OpenText(fileName))
    { 
       ... 
    }
}
catch(Exception e)
{
   e.Data.Add("Filename", fileName);
   throw;
}
于 2013-06-16T21:08:22.120 に答える
2

これを行う既存の例外は絶対にありますが、独自の例外を定義することをお勧めします。

整数値を渡したいので、その特定の例外をどこかでキャッチしたいと思います。その例外に対する特定の処理がない場合、特定の例外を使用しても意味がありません。InvalidOperationException値が例外メッセージの一部である場合など、通常の例外を使用できます。

したがって、その例外を具体的に処理したいので、既存の例外の 1 つを再利用することは賢明ではありません。フレームワークまたは他のサードパーティ ツールがそれらをスローする可能性があり、自分がスローした例外と他の例外を区別するのが難しくなるからです。

于 2013-06-16T21:03:16.177 に答える
2

例外の目的は、例外的な動作を報告することです。例外は想定されていないため、その名前は自己記述的である必要があります。したがって、プロパティは重要ではなく、例外の名前が重要です。

したがって、意味のある名前を持つ新しい例外を作成し、intプロパティを追加するだけです。

public class InvalidNumberException : System.Exception
{
    public InvalidNumberException() : base() { }
    public InvalidNumberException(string message) : base(message) { }
    public InvalidNumberException(string message, int number) : this(message, null, number) { }
    public InvalidNumberException(string message, System.Exception inner) : base(message, inner) { }
    public InvalidNumberException(string message, System.Exception inner, int number) : base(message, inner)
    {
        this.Number = number;
    }
    public int Number { get; set; }
}
于 2013-06-16T21:09:41.010 に答える