group1和group2的lambda表达式有什么不同?

时间:2014-04-21 18:16:59

标签: c#

以下语法中Group1和Group2之间的区别是什么。我刚刚开始使用这些类型的表达式,我看到一个具有委托并且看起来像一个函数(大多数情况下),然后我看到Group1(=>)具有这种语法,我不确定哪个是不同的或哪个更好。

它还说Func<>应该只接受两个参数,但在Group1示例中它需要三个变量。这是为什么?         http://msdn.microsoft.com/en-us/library/bb549151(v=vs.110).aspx

       Group1

        Action<bool> print1 = q => Console.WriteLine(q);
        Action<int> printInt = q => Console.WriteLine(q);
        Func<double, double> square1 = c => c * c;
        Func<double, double, double> add1 = (x, y) => x + y;
        Predicate<double> isLessThanTen1 = f => f < 10;

       Group2

        Func<string, string> convert = delegate(string s)
        { 
            return s.ToUpper(); 
        };

1 个答案:

答案 0 :(得分:3)

组1是创建委托的简便方法,无需delegate()。这是“首选”,因为它更短,更容易阅读。

  • 动作&LT;&GT;是一个带有参数(或多个)并返回void
  • 的委托
  • 函数功能&LT;&GT;是一个委托,它接受一个参数(或多个)并返回一些东西
  • 谓词&LT;&GT;是一个带有参数(或多个)并返回bool
  • 的委托

换句话说

Func<int, void> == Action<int>

Func<int, bool> == Predicate<int>

在您链接到的MSDN页面中,还有Func&lt;&gt;的其他重载。这需要不同数量的参数。例如,here's一个接受4个参数的版本。

该主题的最佳资源之一是C# in Depth Jon Skeet。它给出了代表的良好历史以及每个C#版本的语法更改。