使用IEnumerable <t>作为委托返回类型</t>

时间:2009-07-08 18:14:25

标签: asp.net c#-3.0 delegates

我正在尝试定义一个将返回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));

感谢您的提示。

1 个答案:

答案 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);
        }
    }
}