参考:
Lambda 表达式和匿名函数
什么是lambda 表达式?
C# 中的 lambda 表达式是一种匿名函数,可以用于简化代码,避免定义命名函数或委托。
lambda 表达式的语法如下:
(parameter1, parameter2, ...) => expression
lambda 表达式的示例:
C#// 将一个数字加 1 Func<int, int> addOne = x => x + 1; // 将两个数字相加 Func<int, int, int> add = (x, y) => x + y; // 将一个字符串转换为大写 Func<string, string> toUpperCase = s => s.ToUpper();
lambda 表达式的应用场景如下:
- 委托: lambda 表达式可以用于定义匿名委托,从而简化代码。
- LINQ: lambda 表达式可以用于定义 LINQ 查询表达式,从而简化查询代码。
- 事件处理程序: lambda 表达式可以用于定义事件处理程序,从而简化事件处理代码
LINQ:
Language Integrated Query的缩写,它是一种将查询功能直接集成到编程语言中的技术。
LINQ由微软开发,旨在为.NET Framework提供更高效的数据处理能力。它允许开发人员使用类似于SQL的语法来查询各种数据源,包括关系型数据库、XML文档、ADO.NET数据集以及自定义对象集合。这种技术极大地简化了数据查询的过程,因为它使用程序员熟悉的语言结构,而不是依赖于特定的数据库查询语言。
任何 Lambda 表达式都可以转换为委托类型。 Lambda 表达式可以转换的委托类型由其参数和返回值的类型定义。 如果 lambda 表达式不返回值,则可以将其转换为 Action
委托类型之一;否则,可将其转换为 Func
委托类型之一。
将以下代码改为不使用delegate:
_syncContext.Post(
delegate
{
AddListItem("System disconnected");
bool reset_gui = false;
if (!_closing && _autoconnect && cbAutoReconnect.Checked)
{
frmReconnecting frm = new frmReconnecting(this, _system);
if (frm.ShowDialog() == DialogResult.Cancel)
reset_gui = true;
}
else
{
reset_gui = true;
}
if (reset_gui)
{
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
btnTrigger.Enabled = false;
cbLiveDisplay.Enabled = false;
picResultImage.Image = null;
lbReadString.Text = "";
}
},
null);
不使用delegate:
_syncContext.Post(() =>
{
AddListItem("System disconnected");
bool reset_gui = false;
if (!_closing && _autoconnect && cbAutoReconnect.Checked)
{
frmReconnecting frm = new frmReconnecting(this, _system);
if (frm.ShowDialog() == DialogResult.Cancel)
reset_gui = true;
}
else
{
reset_gui = true;
}
if (reset_gui)
{
btnConnect.Enabled = true;
btnDisconnect.Enabled = false;
btnTrigger.Enabled = false;
cbLiveDisplay.Enabled = false;
picResultImage.Image = null;
lbReadString.Text = "";
}
}, null);
标签:reset,false,C#,gui,Enabled,delegate,Lambda,表达式,lambda From: https://www.cnblogs.com/jonvy/p/18058332