我试图定义一个委托函数将返回一个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));
谢谢你的提示。
你需要在你的“的someMethod”声明指定一个泛型类型参数。
下面是它应该是什么样子:
public void someMethod<T>(GetGridDataSource<T> method)
{
method();
}
当你调用该方法,你将不需要指定类型参数,因为它会从你传递的方法来推断,这样的通话将这个样子:
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);
}
}
}