私はカスタム例外を定義したいと思います。メッセージとして文字列の代わりにクラスを含めることができるかどうかを知りたいと思います。その理由は、より柔軟な構造で余分な情報を送ってほしいということです。例外に追加情報を含むオブジェクトを含めることはできますか?
答えて
はい。 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. 異なるオブジェクトを含む配列に別のオブジェクトを追加することはできません
- 3. 例外への情報の追加
- 4. 追加ラインを含むggplot2散布図に凡例を追加
- 5. 例外を含むコードbbcode
- 6. オブジェクトを含む配列に関する情報を取得します。
- 7. カスタム例外に特別な情報を追加する
- 8. WPFのアクセス情報を含むコントロール
- 9. Ruby on Rails:モデルからの例外を含むオブジェクトを渡す
- 10. オブジェクトに含まれる情報をListViewに表示する
- 11. 追加のフィールドを追加できる列を含むSharePointリスト
- 12. LINQ EFグループ化と例外を含む
- 13. タブ付きのGoogleマップV3ミニマップとコンテンツを含む情報ウィンドウ
- 14. htaccess:例外を含む.phpを.htmlに書き換えます。
- 15. config.xmlを含む外部jarをEclipseプロジェクトに追加する
- 16. Networkx:ノード値とエッジ情報を含むグラフをインポートする
- 17. フィールドと値を含む情報を表示する:ListView、GridView、FormView?
- 18. RIA Services SubmitChanges()中に追加情報を渡すことはできますか?
- 19. 元の例外に関する情報を含む例外を元に戻すにはどうすればよいですか?
- 20. 外部ファイルをキャッシュマニフェストに含めることはできますか?
- 21. UIViewControllerのビューに別のUIViewオブジェクトを含めることはできますか?
- 22. bodyタグ内にdojoファイルへのパスを含むscriptタグを含めることはできますか?
- 23. 追加のCMakeLists.txtを含めるには
- 24. オーディオファイルに改行を含めることはできますか?
- 25. SQLに「ヌル行」を含めることはできますか?
- 26. カスタムフォントをXIBに含めることはできますか?
- 27. 例外を引き起こし、カスタム情報を追加するソース行を記録する方法は?
- 28. 条件付きで含めると次に含む
- 29. CCVを含むすべてのクレジットカード情報を保存する!?
- 30. 例外を含むSQLクエリの注文
??? Throwキーワードは常にクラスで例外をスローします「の代わりに文字列をクラスを投げます」だから、あなたはいつもクラスを投げています。 – nitgeek