C#进阶 | 全面解析Lambda表达式
Posted 码探长
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C#进阶 | 全面解析Lambda表达式相关的知识,希望对你有一定的参考价值。
将要执行的代码传递给异步方法,例如 Task.Run(Action)。
编写 LINQ 查询表达式。
创建表达式树。
delegate int CalculateHandler(int x, int y);
private int Sum(int x, int y)
{
return x + y;
}
public void Test()
{
CalculateHandler sumHandler =new CalculateHandler(Sum);
MessageBox.Show(sumHandler(1, 2).ToString());//输入结果3
}
delegate int CalculateHandler(int x, int y);
public void Test()
{
CalculateHandler sumHandler = delegate(int x, int y) { return x + y; };
MessageBox.Show(sumHandler(1, 2).ToString());//输入结果3
}
delegate int CalculateHandler(int x, int y);
public void Test()
{
CalculateHandler sumHandler = (x, y) => x + y;
MessageBox.Show(sumHandler(1, 2).ToString());//输入结果3
}
public Action SuccessPrompt =() => MessageBox.Show("执行成功!", "提示", MessageBoxButtons.OK, MessageBoxIcon.Information); //没有参数,括号不能省略
public Func<int, int, bool> Compare = (x, y) => x > y;//判断x是否大于y
public Action<string> Prompt = prompt =>
{
MessageBox.Show(prompt, "提示", MessageBoxButtons.OK, MessageBoxIcon.Information);
};//仅当 Lambda 只有一个输入参数时,括号才是可选的;否则括号是必需的
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
button1.Click += async (sender, e) =>
{
await ExampleMethodAsync();
textBox1.Text += "\r\nControl returned to Click event handler.\n";
};
}
private async Task ExampleMethodAsync()
{
// The following line simulates a task-returning asynchronous process.
await Task.Delay(1000);//Task.Delay方法只会延缓异步方法中后续部分执行时间,当程序执行到await表达时,一方面会立即返回调用方法,执行调用方法中的剩余部分,这一部分程序的执行不会延长。另一方面根据Delay()方法中的参数,延时对异步方法中后续部分的执行。
}
}
public void Test1(){
Func<(int, int, int), (int, int, int)> doubleItem = ns => (2 * ns.Item1, 2 * ns.Item2, 2 * ns.Item3);
var itemList = (1, 2, 3); var resultDItemList = doubleItem(itemList);//结果为[2, 4, 6]
}
public void Test2(){
Func<(int x, int y, int z), (int, int, int)> doubleItem = ns => (2 * ns.x, 2 * ns.y, 2 * ns.z);
var itemList = (1, 2, 3); var resultDItemList = doubleItem(itemList);//结果为[2, 4, 6]
}
public class Sutdent
{
public string Id { get; set; }
public string Name { get; set; }
public int Age { get; set; }
}
static void Main(string[] args)
{
List<Sutdent> studentList = new List<Sutdent>();
studentList.Add(new Sutdent {Id = "001", Name = "张三", Age = 18});
studentList.Add(new Sutdent {Id = "002", Name = "李四", Age = 19});
studentList.Add(new Sutdent {Id = "003", Name = "王五", Age = 16});
studentList.Add(new Sutdent {Id = "004", Name = "赵六", Age = 17});
List<Sutdent> list1 = studentList.FindAll(st => st.Age > 17);//选择年龄大于17的所有学生
List<Sutdent> list2 = studentList.Where(st => st.Age > 17).ToList();//选择年龄大于17的所有学生
studentList.Sort((st1,st2)=>st2.Age-st1.Age);//按Age降序排列
List<string> list3 = studentList.Select(st => st.Name).ToList();//选择列表中的所有名字
}
Lambda 包含的参数数量必须与委托类型包含的参数数量相同。
Lambda 中的每个输入参数必须都能够隐式转换为其对应的委托参数。
Lambda 的返回值(如果有)必须能够隐式转换为委托的返回类型。
以上是关于C#进阶 | 全面解析Lambda表达式的主要内容,如果未能解决你的问题,请参考以下文章