C# C语言中带foreach循环的Lambda表达式#
有人能告诉我这个代码块的lambda表达式是什么吗?在您的代码块中有一个,它是C# C语言中带foreach循环的Lambda表达式#,c#,lambda,C#,Lambda,有人能告诉我这个代码块的lambda表达式是什么吗?在您的代码块中有一个,它是Where的唯一参数,如下所示: 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)
Where
的唯一参数,如下所示:
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实际上是(尽管从技术上讲不是)a,这是一个奇特的名称,用于测试某个函数是否为
true
或false
并非每个循环操作都适合lambda表达式。Lambda表达式对于数据的投影很有用——例如,将数据从一种形式转换为另一种形式——应用公式等,但是:这不是您在这里要做的。您正在对数据(控制台.WriteLine)执行某些操作。您可以在这里对LINQ执行一些操作,包括SelectMany
,但是…它的可读性会降低,而不是更高
你已经读到的很好。我唯一要做的更改是:
- 要删除
测试,这永远不会是错误的if(query!=null)
- 删除
-不需要创建新列表来迭代它ToList()
- 无需在需要之前申报
优惠券
- 我可能会提起
p.getId()
您的问题完全不清楚。对于此代码的哪一部分,您需要一个表达式?无论如何,这个问题太广泛了,特别是您没有提供任何自己的负担。我们不是来做您的工作的。对于每个产品
p
,它会写出与p
共享ID的所有产品q
的优惠券名称(包括p
本身)。我想知道那是什么ID。我同意你的说法,不是每个循环操作都适合lambda表达式。但是,如果我们想为所有优惠券名称创建一个IEnumerable
,而不是Console.WriteLine
,那么它可能属于数据投影的范畴……从技术上讲,参数要求由.Select
编辑的是Func
,而不是.NET-2.0风格的方法中的谓词,例如List.FindAll(…)
,但是Func
和谓词是等价的(相同的签名和返回类型)。好的一点是,我用这一澄清更新了我的答案。
b => b.getId() == 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);
}
}