我正在尝试定义一个将返回IEnumerable的委托函数。我有几个问题 - 我认为我很接近,但需要一些帮助才能到达那里......
我可以定义我的代表:
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));
感谢您的提示。
答案 0 :(得分:6)
您需要在“someMethod”声明中指定泛型类型参数。
以下是它的外观:
public void someMethod<T>(GetGridDataSource<T> method)
{
method();
}
当您调用该方法时,您不需要指定type参数,因为它将从您传入的方法中推断出来,因此调用将如下所示:
myObject.someMethod(myObject.methodBeingCalled);
这是一个完整的示例,您可以粘贴到VS并尝试:
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);
}
}
}