2009-07-08 14 views
2

IEnumerableを返すデリゲート関数を定義しようとしています。私は、夫婦の問題を抱えている - 私は近くだと思いますが、そこに取得し、いくつかの助けが必要...私は罰金私のデリゲートを定義することができます IEnumerable <T>をデリゲートの戻り値の型として使用する

:今

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

はどのようにそれを使うのですか?

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

ここには?

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

ヒントをお願いします。

答えて

6

「someMethod」宣言にジェネリック型パラメータを指定する必要があります。ここで

は、それがどのように見えるべきかです:

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

あなたがメソッドを呼び出すと、あなたがそれはあなたが合格方法から推測されるため、型パラメータを指定する必要がないので、呼び出しが見えます

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); 
     } 
    } 
} 
を:

myObject.someMethod(myObject.methodBeingCalled); 

は、ここでは、VSに貼り付けると試してみることができ、完全な例を示します。このような

関連する問題