为什么这段带有lambda表达式的代码不能在.net Framework 2.0中工作?
本文关键字:Framework net 工作 不能 段带 lambda 表达式 代码 为什么 | 更新日期: 2023-09-27 18:13:39
下面的代码不能在。net Framework 2.0中工作。
public delegate string MethodInvokerWithStringResult();
public string NameInvoker()
{
if (InvokeRequired)
{
return this.Invoke(new MethodInvokerWithStringResult(() => lblName.Text));
}
else
{
return lblName.Text;
}
}
如何将其转换为。net Framework 2.0中的工作?
c# 2没有lambda表达式。它通过委托语法有匿名方法:
public string NameInvoker()
{
if (InvokeRequired)
{
return this.Invoke(new MethodInvokerWithStringResult(delegate { return lblName.Text; }));
}
else
{
return lblName.Text;
}
}
避免在委托和方法中重复代码也是相当常见的:
public string NameInvoker()
{
if (InvokeRequired)
{
return this.Invoke(new MethodInvokerWithStringResult(NameInvoker));
}
else
{
return lblName.Text;
}
}
你有两个选择:
-
Annonymous方法:
public string NameInvoker() { if (InvokeRequired) { return this.Invoke(new MethodInvokerWithStringResult(delegate { return lblName.Text; })); } else { return lblName.Text; } }
-
一个命名方法(响应委托签名的常规方法):
public string NameInvoker() { if (InvokeRequired) { return this.Invoke(new MethodInvokerWithStringResult(NamedMethod)); } else { return lblName.Text; } } private string NamedMethod() { return lblName.Text; }