在深入了解C#更高级的特性时,我遇到了一些代码,我不太清楚它们的区别。它是关于这两行的:
Func<string, int> giveLength = (text => text.Length);和
Func<string, int> giveLength = delegate(string text) { return text.Length; };这可以以相同的方式使用:
Console.WriteLine(giveLength("A random string."));所以基本上..这两条线的区别是什么?这些代码行是否编译为相同的CIL?
发布于 2012-09-05 00:01:41
它们基本上是一样的。在C#规范术语中,它们都是匿名函数。
Lambda表达式通常更简洁,也可以转换为,这对于进程外LINQ至关重要。
如果您不关心,匿名方法允许您删除参数列表。例如:
EventHandler handler = delegate {
Console.WriteLine("Sender and args don't matter");
};考虑到很少需要后一点,匿名方法正在成为现代C#中的一种濒临灭绝的物种。Lambda表达式更为常见。
发布于 2012-09-05 00:01:16
所以基本上..这两条线的区别是什么?这些代码行是否编译为相同的CIL?
只有两种不同的方法可以写出相同的东西。lambda语法更新、更简洁,但它们做的是相同的事情(在本例中)。
请注意,lambdas (=>语法)也可用于形成Expression Lambdas,您可以在其中生成Expression Tree而不是委托。这很好,因为无论你是使用LINQ to Objects (基于像Func<T, TResult>这样的委托)还是LINQ to Entities (使用IQueryable<T>和表达式树),你都可以使用相同的语法。
https://stackoverflow.com/questions/12267280
复制相似问题