繁体   English   中英

LINQ查询以调用实例方法

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM