我有以下代码:
int count = 0;
foreach (var c in result)
{
response.AllChecklist[0].obj.Name = c.Name;
response.AllChecklist[0].obj.Category = c.Category;
response.AllChecklist[0].obj.Code = c.Code;
response.AllChecklist[0].obj.chk[count].Name = c.Name;
response.AllChecklist[0].obj.chk[count].Type = c.Type;
response.AllChecklist[0].obj.chk[count].chktatusCode = c.chktatusCode;
response.AllChecklist[0].obj.chk[count].chktatusReasonCode = c.chktatusReasonCode;
count++;
}
我想应用lambda表达式。我知道我应该申请选择很多,因为它有两个不同的类
作为代码审查的一部分,我的主管建议我使用SelectMany
将此循环更改为lambda表达式。我是lambda表达的新手。任何帮助非常感谢?
答案 0 :(得分:1)
假设您可以为response.AllChecklist[0].obj
创建一个新对象(我不知道以前的代码是做什么的),我们假设response.AllChecklist[0].obj
的类型是TObj
,类型为{{1是TObj.chk
,然后您可以将其重构为:
TChk
但正如我所说,假设var lastResultItem = result.Last();
response.AllChecklist[0].obj = new TObj{
lastResultItem.Name,
lastResultItem.Category,
lastResultItem.Code,
chk = result.Select(r => new TChk{
r.Name,
r.Type,
r.chktatusCode,
r.chktatusReasonCode
}).ToList()
});
在原始代码之前没有任何有效数据,因此您可以在不丢失任何数据的情况下重新创建它。
另一个假设是,分配到response.AllChecklist[0].obj
,TObj.Name
和TObj.Category
属性后没有任何其他副作用,然后设置属性值(在原始循环中重复分配给单个对象)来自结果集合元素的属性值,因此在完成循环之后,属性值最终会得到TObj.Code
的最后一个元素的相应属性值。