为什么这段带有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中的工作?

为什么这段带有lambda表达式的代码不能在.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. Annonymous方法:

    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;
     }