[英]LINQ query to call instance method
我写了一些具有这种形式的代码:
var queryResult = from instance in someCollection
where instance meets some criteria
select instance;
foreach (InstanceType instance in queryResult.ToList()) {
instance.SomeMethod();
}
这似乎有点多余,因为查询是在集合上进行迭代,然后有另一个迭代来对所有找到的实例调用该方法。 能够在查询中调用实例方法,而不必编写额外的循环,将是很好的选择。
某个人如何仅用一个查询就能完成上面的代码?
您可以使用ForEach
调用void
方法:
someCollection
.Where(instance => instance meets some criteria)
.ToList()
.ForEach(item => item.SomeMethod(param1, param2, ...)); // Use Foreach(SomeMethod) for methods w/no args
只需从您的代码中删除.ToList()
,您就只可以循环浏览一次集合。
通常,建议您的查询中不要有副作用。而像instance.SomeMethod()
这样的方法通常是副作用。
除了删除ToList调用(实际上是这里的附加循环和冗余循环)外,代码片段对我来说还不错。
看起来好一点。 我不确定实际的迭代次数。
foreach (var instance in someCollection.Where(instance meets some criteria))
{
instance.SomeMethod();
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.