isEqual(Delegat-Methode, Methodengruppe) ?



  • Hey Leute!

    Ich habe im Moment vor die Methode eines Delegat mit einer Instanzmethode zu vergleichen. Hab das vorher noch nie versucht, jetzt wäre das aber ganz praktisch um eine redundante Neuzuweisung der Delegat Methode zu verhinder insofern die Methode innerhalb des Delegat diesselbe wäre wie die, die neu zugewiesen werden soll.

    if(commandEnter.action.Method == currentState.Enter)
    
    Fehler	1	Der Operator "==" kann nicht auf Operanden vom Typ "System.Reflection.MethodInfo" und "Methodengruppe" angewendet werden.	C:\Users\Falke\Desktop\KompanieGame\KompanieGame\PlayerControl.cs	88	17	KompanieGame
    

    Bis auf das ich doof bin steht dort noch was von Methodengruppe. Soweit ich weiss ist das lediglich der Begriff für eine Methode und mehr nicht.

    Ich weiß halt um das Problem das

    commandEnter.action.Method
    

    mir nichts returned was ich vergleichen könnte. Es geht halt mehr darum welchen der
    Milliarden Member ich nutzen soll die "Method" über den DOT operator auffächert.

    gruß Charlie



  • Schau mal auf Stackoverflow - Avoid duplicate event subscriptions in C#. Lässt sich auch für Delegates einsetzen:

    static void MethodTest()
    {
    
    }
    delegate void delegateTest();
    public static void Main()
    {
    	delegateTest del = new delegateTest(MethodTest);
    	if(!del.GetInvocationList().Contains(new delegateTest(MethodTest)))
    		del += MethodTest;
    }
    

    So wird geprüft ob die Methode schon beim delegate registriert ist, und wird nur hinzugefügt wenn das nicht der Fall ist.
    Ist das was du willst ?



  • Yeaaa Danke Dir!

    Hab in GetInvocationList() schon gestöbert aber Contains<>() übersehen oder nicht richtig interpretiert.

    Das Ganze würde bestimmt nun funktionieren - wäre mein Delegat nicht von Beginn an Leer und würde deswegen ne Exception throwen

    Bekomm ich aber geregelt bestimmt 😃


Log in to reply