代码之家  ›  专栏  ›  技术社区  ›  Gregoire

C 3.0表示意义()=>

  •  3
  • Gregoire  · 技术社区  · 15 年前

    此表达式“()=>”的含义是什么?我见过它在构造函数中使用:

    return new MyItem(itemId, () => MyFunction(myParam));
    

    谢谢你

    7 回复  |  直到 15 年前
        1
  •  8
  •   Philippe Leybaert    15 年前

    它是一个没有参数的委托,写为lambda。等同于:

    return new MyItem(itemId, delegate() {return MyFunction(myParam); });
    
        2
  •  6
  •   bobbymcr    15 年前

    那是一个 lambda expression . 示例中的代码等价于:

    return new MyItem(itemId, delegate() { MyFunction(myParam); });
    
        3
  •  2
  •   Pete    15 年前

    很多人回答说这只是一个匿名函数。但这实际上取决于如何声明MyItem。如果是这样宣布的话

    MyItem(int itemId, Action action)
    

    然后,会将()=>编译为匿名函数。但如果MyItem声明如下:

    MyItem(int itemId, Expression<Action> expression)
    

    然后()=>将编译为表达式树,即MyItem构造函数将接收一个对象结构,该结构可用于检查()=>块中的实际代码是什么。Linq严重依赖于这一点,例如在Linq2SQL中,LinqProvider检查表达式树,以了解如何基于表达式构建SQL查询。

    但在大多数情况下()=>将编译为匿名函数。

        4
  •  1
  •   RaYell    15 年前

    它是 lambda 表达式。

        5
  •  1
  •   Thomas Levesque    15 年前

    它是一个lambda表达式,大致相当于一个匿名委托,尽管功能更强大

        6
  •  1
  •   anishMarokey FIre Panda    15 年前

    这是一个 lambda expression . 编译器自动创建委托或表达式树类型

        7
  •  1
  •   Vadim    15 年前

    下面是我刚刚创建的lambda的简单示例:

    internal class Program
    {
        private static void Main(string[] args)
        {
            var item = new MyItem("Test");
            Console.WriteLine(item.Text);
            item.ChangeText(arg => MyFunc(item.Text));
            Console.WriteLine(item.Text);
        }
    
        private static string MyFunc(string text)
        {
            return text.ToUpper();
        }
    }
    
    internal class MyItem
    {
        public string Text { get; private set; }
    
        public MyItem(string text)
        {
            Text = text;
        }
    
        public void ChangeText(Func<string, string> func)
        {
            Text = func(Text);
        }
    }
    

    输出将是:

    试验

    试验