ValidateItem イベントを追加するカスタム コレクションがあります。この ValidateItem イベントは、アイテムがカスタム コレクションに追加または更新されるたびに呼び出されます。
派生クラスがイベントをサブスクライブし、アイテムが「有効」であるかどうかについて独自のロジックを決定できるようにし、「無効」である場合はコレクションへの追加を潜在的に禁止できるようにしたいと考えています。
しかし、イベントの呼び出し元に何が起こっているかを知らせる方法と、何が起こっているかについての情報を返す方法を理解しようとしています。
私のカスタム eventargs は CancelEventArgs を継承しているので、それを使用して Cancel ビットを呼び出し元に戻すことができます。しかし、エラー情報 (エラー コード、メッセージなど) がこの方法で返されるケースを見たことがないので、これが最善の方法ではないのではないかと考えています。
カスタム eventargs クラスに戻したいエラー データを追加する必要がありますか? これには正当な理由がありますか? または、これを達成するための他のより良い方法はありますか?
これが私のeventargsクラスです:
public delegate void ItemValidationEventHandler(object sender, ItemValidationEventArgs e);
public class ItemValidationEventArgs : CancelEventArgs
{
public ItemValidationEventArgs(object item, ObjectAction state, EventArgs e)
{
Item = item;
State = state;
EventArgs = e;
}
public ItemValidationEventArgs(object item, ObjectAction state) : this(item, state, new EventArgs())
{
}
public ItemValidationEventArgs() : this(null, ObjectAction.None, new EventArgs())
{
}
// is there a better way to pass this info?
public string ErrorMessage {get; set;}
public int ErrorNumber {get;set;}
public object Item { get; private set; }
public ObjectAction State { get; private set; }
public EventArgs EventArgs { get; private set; }
}
更新:別のオプションは、次のようなものを使用することだと思います:
virtual bool Validate(object item, ObjectAction action, out string errorMessage)
派生クラスのメソッド。パラメータを避けることを好む傾向がありますが...
誰かがそれぞれのアプローチの長所と短所について何かアイデアを持っているなら、ぜひ聞いてみたいです!
ありがとう、マックス