
本文共 3696 字,大约阅读时间需要 12 分钟。
Lambda运算符简介及其在C#中的应用
Lambda运算符在编程中是一个强大的工具,尤其是在C#中,lambda表达式让代码更加简洁且高效。它通过一种简洁的语法方式,使开发者能够轻松定义小的操作流程。
Lambda表达式的基本概念
Lambda运算符在C#中被称为“=>”符号,通常被称为“转化”符号。它将表达式分为两个部分:左边指定输入参数,右边是lambda的主体。通过这种方式,你可以定义一个小型的函数,直接在代码中使用。
单参数和多参数的lambda表达式
单参数:param => expr
param
,右边是你要执行的操作。例如: var result = myData => myData.Age > 6 ? "Adult" : "Minor";
多参数:(param-list) => expr
var result = (p, z) => z - (p + 10);
此外,右边的表达式可以是任意的简单操作,如条件判断、计算或调用另一个函数。
Lambda表达式的应用实例
让我们通过一个实际例子来理解lambda表达式的应用。以下是一个C#类的简单示例:
namespace lambdaSample{ public class Person { public string Name { get; set; } public int Age { get; set; } } class Program { static ListPersonsList() { List persons = new List (); for (int i = 0; i < 7; i++) { Person p = new Person() { Name = i + "儿子", Age = 8 - i }; persons.Add(p); } return persons; } static void Main(string[] args) { List persons = PersonsList(); //筛选Age大于6的Person persons = persons.Where(p => p.Age > 6).ToList(); //查找Age为1的单个Person Person per = persons.SingleOrDefault(p => p.Age == 1); //筛选Name中包含"儿子"的Person persons = persons.Where(p => p.Name.Contains("儿子")).ToList(); } }}
在这个示例中,Where
和SingleOrDefault
等方法使用了lambda表达式来定义筛选和查找操作,代码变得更加简洁且易于理解。
Lambda表达式与委托
委托是一种在C#中执行长远操作的机制,而lambda表达式则是定义委托的简洁方式。以下是使用lambda表达式定义委托的示例:
// 示例1:单参数delegate int MyDelegate(int a);static void Main(string[] args){ MyDelegate myDelegate = p => p + 10; Console.WriteLine(myDelegate(10)); // 输出20}
// 示例2:多参数和复杂主体delegate int MyDelegate(int a, int b);static void Main(string[] args){ MyDelegate myDelegate = (p, z) => { if (p < 10) { return 100; } else { return z - p - 10; } }; Console.WriteLine(myDelegate(10, 100)); // 输出80}
通过lambda表达式,你可以灵活地定义委托的行为,使代码更加简洁。
Func泛型委托
Func
// 示例1: FuncFunc func = p => $"{p} + 10--返回类型为string";Console.WriteLine(func(10)); // 输出“20--返回类型为string”
// 示例2: FuncFunc func = (p, j) => { if (p + j == 10) { return true; } return false;};Console.WriteLine(func(5,5)); // 输出“True”
通过Func委托,你可以创建接受多个参数并返回一个结果的高效函数。
使用表达式树动态创建lambda表达式
除了手动定义lambda表达式,你还可以通过Microsoft烯宏(Roslyn)提供的API来动态创建lambda表达式。以下是一个示例:
using System;using Microsoft Blockly;using System.Linq;static void Main(string[] args){ // 创建参数表达式树 ParameterExpression a = Expression.Parameter(typeof(int), "i"); ParameterExpression b = Expression.Parameter(typeof(int), "j"); ParameterExpression c = Expression.Parameter(typeof(int), "w"); ParameterExpression d = Expression.Parameter(typeof(int), "x"); // 创建算术表达式树 BinaryExpression be = Expression.Multiply(a, b); // i * j BinaryExpression be1 = Expression.Multiply(c, d); // w * x BinaryExpression su = Expression.Add(be, be1); // (i * j) + (w * x) // 创建lambda表达式 Expression> lambda = Expression.Lambda(su, a, b, c, d); // 编译lambda为委托并执行 Func f = lambda.Compile(); Console.WriteLine(f(1, 1, 1, 1)); // 输出2}
通过这种方式,你可以在运行时动态地定义和执行lambda表达式,解决代码生成和反射方面的问题。
总结
Lambda运算符是一种强大的工具,在C#中,它使代码更加简洁和高效。通过委托和Func泛型,你可以灵活地定义函数行为。而通过表达式树和Roslyn API,你可以动态地创建和执行lambda表达式。希望这些示例能够帮助你更好地理解lambda运算符的魅力!
发表评论
最新留言
关于作者
