我有一个包含多个其他对象列表的对象模型。我想循环思考列表中的每个对象并对它们执行一个方法。该方法称为MyMethod,列表中的每个对象在其类定义中都有此方法。
这就是我所拥有的:
public class MyObject
{
public List<NestedObject1> ListNestedObject1 { get; set; }
public List<NestedObject2> ListNestedObject2 { get; set; }
public void ExecuteMethodsOfNestedObjectLists()
{
if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod();}
if (ListNestedObject2.Count > 0) { from a in ListNestedObject2 a.MyMethod();}
}
}
我希望测试每个嵌套对象列表的长度,并在每个元素上执行MyMethod。我知道我可以做一个foreach循环,但我想看看如何使用linq语法来缩短它。
如何重写它以使其有效?
感谢。
答案 0 :(得分:2)
所以你问的是如何为每个嵌套对象执行这个方法?
ListNestedObject1.ForEach(obj => obj.MyMethod());
ListNestedObject2.ForEach(obj => obj.MyMethod());
注意:List.ForEach
不是LINQ(尽管它有类似的外观)并且在.NET 2.0中引入。
答案 1 :(得分:1)
你应该使用foreach循环。这就是它的用途。
Linq专为查询数据而设计,并非设计用于引起副作用。您正在寻找的是Linq ForEach
扩展方法。 Eric Lippert explains如果您有兴趣,可以更详细地从语言中故意省略 。
你当然可以自由地忽视这些哲学问题并编写自己的ForEach
方法。
答案 2 :(得分:0)
而不是
if (ListNestedObject1.Count > 0) { from a in ListNestedObject1 a.MyMethod(); }
使用
if (ListNestedObject1.Count > 0)
{
ListNestedObject1.Select(
a=>
{
a.MyMethod();
return a;
}
}
以ListNestedObject2
答案 3 :(得分:0)
您可以使用List<T>
中的ForEach扩展方法,这与foreach
循环非常相似。请注意,这不适用于IEnumerable<T>
,一般来说,是否应该使用此代替foreach
循环,这一点备受争议。
MyObject.ListNestedObject1.ForEach(MyMethod);
MyObject.ListNestedObject2.ForEach(MyMethod);