Lambda表达式是一个匿名函数,使用=>
运算符定义。=>
运算符左侧是输入参数,右侧是lambda主体。
语法:
member => expression;
member:输入参数,可以是0个或多个。
expression:有效的表达式。
1、lambda表达式基本用法
下面method
和lambdaMethod
拥有相同的效果,lambdaMethod
是method
的简写版。
method();
lambdaMethod();
void method()
{
Console.WriteLine("hello world");
}
void lambdaMethod() => Console.WriteLine("hello lambda");
//输出:
//hello world
//hello lambda
2、lambda表达式的输入参数
-
零个参数无返回值
Action printHello = () => Console.WriteLine("hello world"); printHello(); //输出:hello world
-
一个参数无返回值,一个参数时可以省略括号
Action<string> printName = it => Console.WriteLine($"我的名字叫:{it}"); printName("张三"); //输出:我的名字叫:张三
-
零个参数有返回值
Func<DateTime> date = () => DateTime.Now.Date; var year = date().Year; Console.WriteLine($"今年是{year}年"); //输出:今年是2023年
-
一个参数有返回值
int num = 12; Func<int, int> square = x => x * x; var result = square(num); Console.WriteLine($"{num}的二次方是:{result}"); //输出:12的二次方是:144
-
两个以上参数有返回值
Func<int, int, bool> myCompare = (x, y) => x == y; if (myCompare(1, 2)) { Console.WriteLine("相等"); } else { Console.WriteLine("不相等"); } //输出:不相等
-
使用
弃元
指定 lambda 表达式中不使用的参数Func<int, int, bool> test = (_, _) => true; Console.WriteLine(test(1,2)); //输出:true
3、在LINQ中使用lambda表达式
string[] cities = { "成都", "重庆", "上海", "武汉" };
var chengdu = cities.SingleOrDefault(it => it.StartsWith("成"));
Console.WriteLine(chengdu);
lambda表达式输入参数是强类型,上面的例子中编译器可以自动推断出 it 的类型。如果编译器不能推断出类型我们则需要手动输入参数类型。像下面这样:
string[] cities = { "成都", "重庆", "上海", "武汉" };
var chengdu = cities.SingleOrDefault( (string it) => it.StartsWith("成"));
Console.WriteLine(chengdu);
4、lambda表达式转换为委托类型
任何 lambda 表达式都可以转换为委托类型。
-
转换为
Action
委托类型:一个参数没有返回值的可转换为:
Action<T>
委托。 -
转换为
Func
委托类型:一个参数有返回值的可转换为:
Func<T,TResult>
委托。
var lambdaClass = new LambdaClass();
lambdaClass.Ad("hello"); //调用委托
var length = lambdaClass.Fd("hello world"); //调用委托
Console.WriteLine(length);
public class LambdaClass
{
//Action<string>委托
public delegate void actionDelegate(string str);
//Func<string, int>委托
public delegate int funcDelegate(string str);
//Action<string>委托对象
public actionDelegate Ad = x => Console.WriteLine($"输入的参数为 {x}");
//Func<string, int>委托对象
public funcDelegate Fd = str => str.Length;
}
//输出:
//输入的参数为 hello
//11
该文章亦发表在个人网站,欢迎访问收藏:
网站链接:www.bitsof.cn
本文链接:C#Lambda表达式使用 - BitsOf