System.Action的使用(lambda 表达式)

Posted mzy-google

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了System.Action的使用(lambda 表达式)相关的知识,希望对你有一定的参考价值。

 

对于Action的使用方法使用如下:

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string first = "First";
            var action = new Action(() => { Console.WriteLine(first); });
            action();

            var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
            action2(first);

            var action3 = new Action<string, string>((s1, s2) => {
                Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
            });
            action3(first, "second");
        }
    }
}

使用dotPeek通过反编译,得到代码:

namespace ConsoleApp1
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      string first = "First";
      ((Action) (() => Console.WriteLine(first)))();
      ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
      ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
    }
  }
}

 

下面写一种与反编译出来的相似的方法

namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            string first = "First";
            var action = new Action(() => { Console.WriteLine(first); });
            action();

            var action2 = new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); });
            action2(first);

            var action3 = new Action<string, string>((s1, s2) =>
            {
                Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
            });
            action3(first, "second");

            new Action(() => { Console.WriteLine(first); })();
            new Action<string>((s) => { Console.WriteLine($"Action<T>:{s}"); })(first);
            new Action<string, string>((s1, s2) =>
            {
                Console.WriteLine($"Action<T1,T2>:{s1},{s2}");
            })(first, "second");
        }
    }
}

看一下反编译的结果:

namespace ConsoleApp1
{
  internal class Program
  {
    private static void Main(string[] args)
    {
      string first = "First";
      ((Action) (() => Console.WriteLine(first)))();
      ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(first);
      ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(first, "second");
      ((Action) (() => Console.WriteLine(first)))();
      string str1 = first;
      ((Action<string>) (s => Console.WriteLine(string.Format("Action<T>:{0}", (object) s))))(str1);
      string str2 = first;
      string str3 = "second";
      ((Action<string, string>) ((s1, s2) => Console.WriteLine(string.Format("Action<T1,T2>:{0},{1}", (object) s1, (object) s2))))(str2, str3);
    }
  }
}

反编译结果是帮我们定义了几个变量。

 

以上是关于System.Action的使用(lambda 表达式)的主要内容,如果未能解决你的问题,请参考以下文章

lambda 表达式使用 select 和 where 子句连接多个表

(Linq/Lambda) 使用 2 个 DBContext 连接 2 个或更多表

在 python 3 中使用 map 和 lambdas,为啥这段代码不会更新 sql 表

访问System.Action中的对象属性

使用实体框架 4.1 进行多表连接,我应该使用 lambda 还是 LINQ?

如何使用 AWS Lambda 按名称查询 dynamoDB 表