カスタム例外を扱う、私は通常、Exceptionから継承され、その後、いくつかの追加情報格納するために私の例外クラスにいくつかのフィールド/プロパティを追加する場合:上記の例ではカスタム例外内にデータを保存するにはどうすればよいですか?
public class MyException : Exception
{
public int ErrorCode{get;set;}
public MyException()
{}
}
を、ErrorCode
値は例外に保存されていますつまり、保護されたコンストラクタのSerializationInfo
オブジェクトとオーバーライドされたGetObjectData
メソッドの場合は、それを追加してリタイアする必要があります。
例外に関する追加のユーザー定義情報を提供するキー/値ペアのコレクションを取得します:
私はData
内部エラーコードを格納した場合、それは私の例外クラスは、今のように見えることを意味し、(リフレクターに応じて)例外クラスによって私のためにシリアライズされます:
public class MyException : Exception
{
public int ErrorCode
{
get {return (int) Data["ErrorCode"];}
set {Data["ErrorCode"] = value;}
}
public MyException()
{}
}
この手段をエラーコードの取得/設定(キャストエラーやエラーコードが辞書にないかもしれない状況など)に対処するにはもう少し作業が必要ですが、シリアル化について心配する必要はありません/それをデシリアライズする。
同じことを達成するには2つの方法がありますか、もう1つの方法で明確な利点がありますか?