C# Lambda 表达式 =>

Lambda 表达式是作为对象处理的代码块(表达式或语句块)。 它可作为参数传递给方法,也可通过方法调用返回。 Lambda 表达式广泛用于:

  • 将要执行的代码传递给异步方法,例如Run(Action)

  • 编写LINQ查询表达式

  • 创建表达式树

Lambda 表达式是可以表示为委托的代码,或者表示为表达式树的代码,它所表示的表达式树可以编译为委托。 Lambda 表达式的特定委托类型取决于其参数和返回值。 不返回值的 Lambda 表达式对应于 Action 委托,具体取决于其参数数量。 返回值的 Lambda 表达式对应于 Func 委托,具体取决于其参数数量。例如,有 2 个参数但不返回值的 Lambda 表达式对应于Action<T1,T2>委托。 有 1 个参数并返回值的 Lambda 表达式对应于Func<T,TResult>委托。

Lambda 表达式使用 lambda声明运算符=> 从其可执行代码中分离 lambda 参数列表。 若要创建 Lambda 表达式,需要在 lambda 运算符左侧指定输入参数(如果有),然后在另一侧输入表达式或语句块。 例如,单行 Lambda 表达式 x => x * x 指定名为 x 的参数并返回 x 的平方值。 如下面的示例所示,你可以将此表达式分配给委托类型:

Func<int,int> square = x => x * x; Console.WriteLine(square(25));

或者,可以将其直接作为方法参数传递:

static void Main()

{

ShowValue(x => x + x);

}

private static void ShowValue(Func<int,int> op)

{

for(intctr =1; ctr <=5; ctr++)

Console.WriteLine("{0} + {0} = {1}",ctr, op(ctr));

}

表达式 lambda:

表达式位于 => 运算符右侧的 Lambda 表达式称为“表达式 lambda”。 表达式 lambda 广泛用于表达式树的构造。 

表达式 lambda 会返回表达式的结果,并采用以下基本形式:(input parameters) => expression

仅当 lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的。 使用空括号指定零个输入参数:

Action line = () => Console.WriteLine();

语句 lambda

语句 lambda 与表达式 lambda 表达式类似,只是语句括在大括号中:

(input parameters) => { statement; }

语句 lambda 的主体可以包含任意数量的语句;但是,实际上通常不会多于两个或三个

delegate void TestDelegate(string s);

public static void Main()

{

TestDelegate test = n => {strings = n +" "+"World"; Console.WriteLine(s); };

test("Hello");

}

像匿名方法一样,语句 lambda 也不能用于创建表达式目录树。

异步 lambda


public static void Main()

{

Begin().Wait();

}

private static async Task Begin()

{

for(intctr =2; ctr <=5; ctr++)

{

varresult =awaitShowSquares(ctr);

Console.WriteLine("{0} * {0} = {1}", ctr, result);

}

}

private static async Task<int> ShowSquares(int number)

{

returnawaitTask.Factory.StartNew( x => (int)x * (int)x, number);

}


版权声明:本文为yangxueyangxue原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。