Lambda表达式在实际编程中的应用

时间:2009-06-25 10:09:51

标签: c# linq lambda

我是一名经验丰富的C#开发人员,从事过去7年的LOB应用程序工作,我在编程中理解Lambda表达式的使用方面存在一些问题。

据我了解,在

的情况下它很有用
  1. 使用LINQ(分组,选择,等等......)
  2. 我们可以将Lambda表达式作为参数传递给任何函数,因此它可以用来代替委托或匿名函数或普通函数。
  3. 我们可以创建通用lambda函数,它将任何数据类型变量作为参数,并且可以返回任何数据类型,例如

    MyFirstLambdaFunc((val1,val2) => val1+val2)
    public R MyFirstLambdaFunc(Func lambdaexpression,T x,T y)
    {
      R Result = lambdaexpression(x, y);
      return Result;
    }
    
  4. 编码可以是紧凑的

  5. 现在的问题是:

    1. 还有其他优点吗?
    2. 当我们将lambda表达式作为函数传递时,我们只能传递一行操作吗?
    3. 任何人都可以有一些案例研究或一些实用的示例文件吗?
    4. 先谢谢

      Harish Bhattbhatt

4 个答案:

答案 0 :(得分:2)

对于非表达式树,您当然可以编写多行lambda表达式。就在今天早上,我写了一些内容:

 var query = foo.Select(x => {
               string text = x.Value;
               int delimitedIndex = text.IndexOf(' ');
               return int.Parse(text.Substring(0, delimitedIndex);
             });

Lambda表达式几乎可以在任何想要使用合理简单实现创建委托实例的地方使用。

为了提供另一个例子,假设您想要启动一些线程来处理许多值中的每一个。 (让我们忽略我们创建大量线程的事实 - 同样的技术也适用于线程池。)你可以使用类似的东西:

foreach (string url in urls)
{
    // Slight quirk due to variable capture semantics
    string urlCopy = url;
    new Thread(() => FetchUrl(urlCopy)).Start();
}

以强类型方式执行此操作通常很棘手 - 有ParameterizedThreadStart,但这不是通用的,因此它变得非常繁琐。这是相当干净的IMO。

答案 1 :(得分:0)

谢谢Jon,

您的多线功能非常受欢迎

x => {       string text = x.Value;       int delimitedIndex = text.IndexOf('');       return int.Parse(text.Substring(0,delimitedIndex);      }

如果可能的话,你能提供一些更多的例子或情况,其中lambda表达式可以代替其他编程技术提供很大的帮助......只有在可能的情况下

我认为这会对很多人有所帮助,因为从技术角度来说,知道事情是不够的,但在实际使用它的地方以及它在特定情况下如何帮助是非常重要的。

答案 2 :(得分:0)

我使用lambdas作为事件处理程序,例如:

button.Click += (sender, e) => DoSomething();

我觉得它创建了一个非常干净的语法,偶尔闭包语义可以用于处理事件。

答案 3 :(得分:0)

.NET 4的新任务并行库广泛使用它。例如,如果要并行运行代码块,可以编写:

 Parallel.For(1, 10, i =>
 {
   // do work
 });

在我看来,这比仅仅传递方法要好得多,比如:

 Parallel.For(1, 10, SomeMethodWithIntAsParam);