C#でeventの戻り値を個別で受け取る方法

クラスで戻り値付のイベントを定義してみたものの、最後に実行されたイベントの戻り値しか取得できなくて困ったことありませんか?
———————————-
static event Func evnt;
Func func1 = (() => { return true; });
Func func2 = (() => { return false; });
evnt += func1;
evnt += func2;
var ret = evnt();
———————————-
この場合、func2の戻り値しか取得できません。
func1の戻り値は破棄されます。
そんな時はGetInvocationList()を使いましょう。
———————————-
Func func1 = (() => { return true; });
Func func2 = (() => { return false; });
evnt += func1;
evnt += func2;
var il = evnt.GetInvocationList();
foreach (Func i in il)
{
var rr = i();
Trace.WriteLine(rr);
}
———————————-
これで、イベントを個別に実行して戻り値を取得できます。
戻り値によって以後のイベントの実行を停止することもできます。

Author: kachi

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です