[英]Why doesn't this code with a lambda expression work in .NET Framework 2.0?
以下代码在.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;
}
}
您有两种选择:
匿名方法 :
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; }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.