使用一个IEnumerable 作为委托返回类型(Using an IEnumerable

2019-07-29 20:37发布

我试图定义一个委托函数将返回一个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));

谢谢你的提示。

Answer 1:

你需要在你的“的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);
        }
    }
}


文章来源: Using an IEnumerable as a delegate return type