如何在使用 重构后访问在外部循环上迭代的值.选择“多”
本文关键字:选择 迭代 外部 重构 访问 循环 | 更新日期: 2023-09-27 18:31:03
我以前有一个嵌套的 for 循环,如下所示:
for(int i = 0; i < outerObject.Count(); i++)
{
for(int j = 0; j < outerObject[i].innerObject.Count(); j++)
{
DataRow myDataRow = myDataTable.NewRow();
myDataRow["Column1"] = outerObject[i].PropertyX;
myDataRow["Column2"] = innerObject[j].PropertyY;
myDataTable.Rows.Add(myDataRow);
}
}
我已经使用 LINQ SelectMany
运算符重构了上述内容,但我不确定如何访问我以前使用 outerObject[i].PropertyX
访问
var objects = outerObject.SelectMany(x => x.innerObject)
foreach (var object in objects)
{
DataRow myDataRow = myDataTable.NewRow();
//myDataRow["Column1"] = // I am unsure how to get the value of outerObject[i].PropertyX here
myDataRow["Column2"] = object.PropertyY;
myDataTable.Rows.Add(myDataRow);
}
有人可以在这里帮我吗?
var objects = outerObject.SelectMany(x => new { outer = x, inner = x.innerObject })
foreach (var obj in objects)
{
DataRow myDataRow = myDataTable.NewRow();
myDataRow["Column1"] = obj.outer.PropertyX;
myDataRow["Column2"] = obj.inner.PropertyY;
myDataTable.Rows.Add(myDataRow);
}
为了访问外部迭代器,您至少可以做两件事。
通过为其提供{ }
语法或使其成为完整方法,在 lambda 中执行循环逻辑
var objects = outerObject.SelectMany(x =>
{
var result = x.InnerObject;
DataRow myDataRow = myDataTable.NewRow();
myDataRow["Column1"] = x.PropertyX;
myDataRow["Column2"] = result.PropertyY;
myDataTable.Rows.Add(myDataRow);
return result;
}
使用new {...}
语法缓存迭代器,因为嵌套 lambda 与嵌套循环具有相同的访问权限。
var objects = outerObject.SelectMany(x => x.InnerObject
.Select(inner => new { Outer = x, Inner = inner } ));
foreach (var obj in objects)
{
DataRow myDataRow = myDataTable.NewRow();
myDataRow["Column1"] = obj.Outer.PropertyX;
myDataRow["Column2"] = obj.Inner.PropertyY;
myDataTable.Rows.Add(myDataRow);
}