2009-07-08 7 views
2

Ich versuche, eine Delegat-Funktion zu definieren, die ein IEnumerable zurückgibt. Ich bin ein paar Probleme mit - ich glaube, ich bin in der Nähe, aber brauche Hilfe dorthin zu gelangen ...Verwenden eines IEnumerable <T> als einen Delegat-Rückgabetyp

ich meine Delegierten definieren fein:

public delegate IEnumerable<T> GetGridDataSource<T>(); 

Nun, wie es verwenden?

// I'm sure this causes an error of some sort 
public void someMethod(GetGridDataSource method) { 
     method(); 
} 

Und hier?

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

Danke für Tipps.

Antwort

6

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

Hier ist, wie es aussehen sollte:

public void someMethod<T>(GetGridDataSource<T> method) 
{ 
     method(); 
} 

Wenn Sie die Methode aufrufen, müssen Sie nicht den Typ-Parameter angeben, da es aus dem Verfahren abgeleitet werden, die Sie in übergeben, so wird der Anruf aussehen dies wie:

myObject.someMethod(myObject.methodBeingCalled); 

Hier ist ein vollständiges Beispiel Sie in VS einfügen können und ausprobieren:

namespace DoctaJonez.StackOverflow 
{ 
    class Example 
    { 
     //the delegate declaration 
     public delegate IEnumerable<T> GetGridDataSource<T>(); 

     //the generic method used to call the method 
     public void someMethod<T>(GetGridDataSource<T> method) 
     { 
      method(); 
     } 

     //a method to pass to "someMethod<T>" 
     private IEnumerable<string> methodBeingCalled() 
     { 
      return Enumerable.Empty<string>(); 
     } 

     //our main program look 
     static void Main(string[] args) 
     { 
      //create a new instance of our example 
      var myObject = new Example(); 
      //invoke the method passing the method 
      myObject.someMethod<string>(myObject.methodBeingCalled); 
     } 
    } 
} 
Verwandte Themen