此表达式的含义是什么“()=>”。我已经看到它在构造函数中使用:
return new MyItem(itemId, () => MyFunction(myParam));
谢谢
答案 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