C#中带有foreach循环的Lambda表达式

时间:2018-09-05 18:42:27

标签: c# lambda

 var coupon=" ";

 foreach(var p in products)
 {
     var query = products.Where(b => b.getId() == p.getId()).ToList();

     if (query != null)
     {
         foreach(var q in query)
         {
             coupon = q.getName();
             Console.WriteLine(coupon);
         }
     }
 }

谁能告诉我此代码块的lambda表达式是什么

2 个答案:

答案 0 :(得分:3)

并非每个循环操作都适合于lambda表达。 Lambda表达式对于数据的 projections 很有用-即将其从一种形式转换为另一种形式-应用公式等,但是:这不是您在这里所做的。您正在对数据执行 Console.WriteLine。您可以在此处使用SelectMany对LINQ进行某些操作,但是...变得更少可读,而不是更多。

您已经拥有的就好了。我唯一要做的更改是:

  • 删除if (query != null)测试-这永远不会是假的
  • 删除ToList()-无需创建新的列表即可对其进行迭代
  • 无需先声明coupon
  • 我可以吊起p.getId()

所以:

 foreach(var p in products)
 {
     var id = p.getID();
     foreach(var q in products.Where(b => b.getId() == id))
     {
         var coupon = q.getName();
         Console.WriteLine(coupon);
     }
 }

答案 1 :(得分:0)

您的代码块中有一个lambda expression,它是Where的唯一参数,如下所示:

b => b.getId() == p.getId()

在此特定情况下,lambda有效地(emem)(尽管从技术上讲不是)是Predicate,它是一个用于测试某物是否为truefalse