繁体   English   中英

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

[英]Lambda Expression with foreach loop in C#

 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 表达式是什么

并非每个循环操作都适合 lambda 表达式。 Lambda 表达式对于数据的投影很有用——即将它从一种形式转换为另一种形式——应用公式等,但是:这不是你在这里做的。 你正在的数据(的东西Console.WriteLine ,你可以做LINQ这里涉及到的东西SelectMany ,但...这将变得不太可读,而不是更多。

你所拥有的就好了。 我要做的唯一改变是:

  • 删除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);
     }
 }

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

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

在这种特殊情况下, lambda 是有效的(虽然不是技术上的) Predicate ,这是一个测试某事是true还是false的函数的奇特名称

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM