web-dev-qa-db-ja.com

特定のイベントハンドラーメソッドが既にアタッチされているかどうかを確認する

この質問に関連して、 イベントが既に存在するかどうかを確認

しかし、違いは、特定のメソッドがイベントに関連付けられているかどうかを知りたいだけです。 otherメソッドがアタッチされている可能性がありますが、特定のメソッドが存在するかどうかを知りたいだけです。

私の環境はdotnet 4.0のC#です。

例えば。

Event += MyMethod1;
Event += MyMethod2;

// Some code
if (MyMethod1IsAttachedToEvent())
{
    // Achieved goal
}

これは可能ですか?

14
Shiv

いいえ、あなたがすることはできません。

eventキーワードは、目的の操作を実行できないようにするために明示的に発明されました。これにより、イベントのデリゲートオブジェクトにアクセスできなくなり、誰もイベントハンドラーを操作できなくなります。

ソース: イベントがすでにサブスクライブされているかどうかを確認する方法

21
PaRiMaL RaJ
foreach ( Delegate existingHandler in this.EventHandler.GetInvocationList() )
{
    if ( existingHandler == prospectiveHandler )
    {
          return true;
    }
}

GetInvocationListメソッドを使用してデリゲートをループします。

3
Benjiman
Event.GetInvocationList().Any(x => x.Method.Name.Equals("yourmethodname"));
2
TalentTuner