私はカスタム例外を定義したいと思います。メッセージとして文字列の代わりにクラスを含めることができるかどうかを知りたいと思います。その理由は、より柔軟な構造で余分な情報を送ってほしいということです。例外に追加情報を含むオブジェクトを含めることはできますか?
答えて
はい。 Exceptionから継承するクラスを作成するだけです。
class YourException : Exception
{
public YourException(SpecialObject thethingYouWantIncluded)
{
ExtraObject = thethingYouWantIncluded;
}
public SpecialObject ExtraObject { get; private set; }
}
その後、
throw new YourException(new SpecialObject());
と
catch (YourException ex) { /* do something with ex.ExtraObject here */ }
はいあなたができる、一種の。
C#では、すべての例外はクラスであり、System.Exception
のインスタンスまたはそれから派生したクラスです。カスタム例外を作成する場合は、Exception
から継承する新しいクラスを定義するだけです。あなたが欲しい
このカスタムクラスでは、あなたは追加のどんなプロパティ、フィールドを追加することができますが、その他:
public class CustomException : Exception
{
public Object CustomThing { get; set; }
}
あなたがすべてにアクセスできるようになりますCustomException
あなたがタイプの変数に、このような例外をキャッチ他のどのクラスと同様に、定義したカスタムプロパティ。
ただし、はできませんすることはできません。Exception.Message
は文字列です。カスタムメッセージクラスはMessage
プロパティを持ち、string
になります。変更することはできません。すべての関連情報を含むカスタム文字列を定義する必要があります。あなたのカスタムプロパティからの情報を返すためにMessage
プロパティをオーバーライドすることができ、それはまだ文字列にする必要がある:
public class CustomException : Exception
{
public override string Message
{
get
{
if (this.CustomThing == null)
{
return base.Message;
}
else
{
return string.Format("Custom thing: {0}", this.CustomThing);
}
}
}
}
+1のために: "しかし、あなたがすることができないことは、Exception.Messageが文字列であるという事実を変更することです。" – hometoast
- 1. 詳細な例外情報を含むトレースログを生成する方法は?
- 2. 2つのカスタム情報を含むjsonレスポンスを送信するカスタムランタイム例外を書き込む方法は?
- 3. 異なるオブジェクトを含む配列に別のオブジェクトを追加することはできません
- 4. 出力オブジェクトに追加情報を含めるのは良い考えですか?
- 5. 他の追加情報に依存するLaravel 5モデルに追加を含めることはできますか?
- 6. android用のファブリッククラッシュサイエンス - stackTraceエリアに追加情報を含めるには
- 7. 例外への情報の追加
- 8. 追加情報を含む新しいシートに情報を検索、切り取り、ペーストするユーザーフォーム
- 9. ファイルの処理 - 追加情報を含む新しいファイルを作成する
- 10. 追加ラインを含むggplot2散布図に凡例を追加
- 11. 例外を含むコードbbcode
- 12. 例外を含むPHPリストファイル
- 13. オブジェクトを含む配列に関する情報を取得します。
- 14. カスタム例外に特別な情報を追加する
- 15. OpenGL TESでは、出力に隣接情報を含めることができますか?
- 16. userDetailsにカスタム情報を追加することはできますか?
- 17. ユーザー情報を含むIdentity Server 4アクセストークン
- 18. WPFのアクセス情報を含むコントロール
- 19. Ruby on Rails:モデルからの例外を含むオブジェクトを渡す
- 20. オブジェクトに含まれる情報をListViewに表示する
- 21. Application Insights - 例外情報を追加します。
- 22. LINQ EFグループ化と例外を含む
- 23. パスワードを含む外部xmlファイルをクラスパスに追加します。
- 24. タブ付きのGoogleマップV3ミニマップとコンテンツを含む情報ウィンドウ
- 25. avrojsonに追加情報を追加できますか?
- 26. 追加のフィールドを追加できる列を含むSharePointリスト
- 27. htaccess:例外を含む.phpを.htmlに書き換えます。
- 28. フィールドと値を含む情報を表示する:ListView、GridView、FormView?
- 29. Networkx:ノード値とエッジ情報を含むグラフをインポートする
- 30. RIA Services SubmitChanges()中に追加情報を渡すことはできますか?
??? Throwキーワードは常にクラスで例外をスローします「の代わりに文字列をクラスを投げます」だから、あなたはいつもクラスを投げています。 – nitgeek