繁体   English   中英

为什么带有lambda表达式的代码在.NET Framework 2.0中不起作用?

[英]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;
    }
}

您有两种选择:

  1. 匿名方法

     public string NameInvoker() { if (InvokeRequired) { return this.Invoke(new MethodInvokerWithStringResult(delegate { return lblName.Text; })); } else { return lblName.Text; } } 
  2. 命名方法(回答委托人签名的常规方法):

     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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM