2 Stimmen

Die Verwendung eines IEnumerable<T> als Rückgabetyp eines Delegaten

Ich versuche, eine Delegatenfunktion zu definieren, die ein IEnumerable zurückgibt. Ich habe ein paar Probleme - Ich denke, ich bin nah dran, aber brauche etwas Hilfe, um dorthin zu gelangen...

Ich kann meinen Delegaten problemlos definieren:

 public delegate IEnumerable GetGridDataSource();

Wie benutze ich es jetzt?

 // Ich bin mir sicher, dass das irgendwie einen Fehler verursacht
 public void someMethod(GetGridDataSource method) { 
      method();
 }  

Und hier?

 myObject.someMethod(new MyClass.GetGridDataSource(methodBeingCalled));

Danke für die Tipps.

6voto

Doctor Jones Punkte 20466

Sie müssen einen generischen Typenparameter in Ihrer Deklaration von "someMethod" angeben.

So sollte es aussehen:

public void someMethod(GetGridDataSource method) 
{ 
      method();
}

Wenn Sie die Methode aufrufen, müssen Sie den Typenparameter nicht angeben, da er aus der Methode, die Sie übergeben, abgeleitet wird. Der Aufruf sieht also folgendermaßen aus:

myObject.someMethod(myObject.methodBeingCalled);

Hier ist ein komplettes Beispiel, das Sie in VS einfügen und ausprobieren können:

namespace DoctaJonez.StackOverflow
{
    class Example
    {
        //die Delegatendeklaration
        public delegate IEnumerable GetGridDataSource();

        //die generische Methode, die die Methode aufruft
        public void someMethod(GetGridDataSource method)
        {
            method();
        }

        //Eine Methode, die an "someMethod" übergeben wird
        private IEnumerable methodBeingCalled()
        {
            return Enumerable.Empty();
        }

        //unser Hauptprogramm
        static void Main(string[] args)
        {
            //eine neue Instanz unseres Beispiels erstellen
            var myObject = new Example();
            //die Methode aufrufen und die Methode übergeben
            myObject.someMethod(myObject.methodBeingCalled);
        }
    }
}

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X