什么是Action <t> </t>的用途

时间:2013-11-27 12:34:11

标签: c# .net c#-4.0

我在下面的代码中读到了Action<T> and returns Action<T>

private static Action<HttpContext> WrapCallback(Action<HttpContextBase> callback)
{
        if (callback != null)
        {
            return delegate(HttpContext context)
            {
                callback(new HttpContextWrapper(context));
            }
            ;
        }
        return null;
    }

What is the use of returning Action<T>而不是像对象,字符串等知道的类型。我不明白它如何在程序中使用。任何场景/示例请

2 个答案:

答案 0 :(得分:2)

对于你的例子,你可以这样做

回电功能

public void ActFunction(int a)
         {
         }

调用代码

Action<int> act = new Action<int>(aActFunction);
WrapCallback(act);

相反,Action是您要传递给WrapCallback的函数

是功能

public class ActionDemo
{
     public void ActFunction(int a)
     {
     }
     public void ActFunction1()
     {
     }

     static void Main()
     {
        ActionDemo ad = new ActionDemo();


        Action act1 = new Action(ad.ActFunction1);
        act1();     
        Action<int> act = new Action<int>(ad.ActFunction);
        act();
     }
}

有关此内容的详细信息,请参阅此博文:http://pranayamr.blogspot.no/2012/08/delegate-and-action-and-func-and-lamda.html

答案 1 :(得分:2)

基本上,它等同于手动创建lambda;

Action<HttpContext> callback1 = WrapCallback(DoSomething);
Action<HttpContext> callback2 = x => DoSomething(new HttpContextWrapper(x));

换句话说,它将作为参数给出的函数包装在另一个函数中并返回新函数。

新函数 - 在调用时 - 将HttpContext参数包装在HttpContextWrapper中并用它调用原始函数。