c#3.0 expression()=>的含义

时间:2009-09-12 16:08:25

标签: c#-3.0 operators

此表达式的含义是什么“()=>”。我已经看到它在构造函数中使用:

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

谢谢

7 个答案:

答案 0 :(得分:8)

这是一个没有参数的委托,写成一个lambda。与:相同:

return new MyItem(itemId, delegate() {return MyFunction(myParam); });

答案 1 :(得分:6)

那是lambda expression。您的示例中的代码等同于:

return new MyItem(itemId, delegate() { MyFunction(myParam); });

答案 2 :(得分:2)

很多人都回答说这只是一个匿名函数。但这实际上取决于MyItem的声明方式。如果它被声明为这样

MyItem(int itemId, Action action)

然后是,()=> {}将编译为匿名函数。但是,如果MyItem被声明为:

MyItem(int itemId, Expression<Action> expression)

然后是()=&gt; {}将被编译成表达式树,即MyItem构造函数将接收一个对象结构,它可以用来检查()=&gt;中的实际代码。 {}块是。 Linq在Linq2Sql中严重依赖于此,其中LinqProvider检查表达式树以找出如何基于表达式构建SQL查询。

但在大多数情况下()=&gt; {}将被编译成匿名函数。

答案 3 :(得分:1)

这是lambda表达式。

答案 4 :(得分:1)

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

答案 5 :(得分:1)

你是lambda expression。编译器自动创建委托或表达式树类型

答案 6 :(得分:1)

以下是我刚刚创建的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);
    }
}

输出将是:

  

测试

     

TEST