在控制台应用程序中,从主类程序中的静态方法,我调用:
internal class Module
{
public bool EnsureModuleLocalInstall()
{
if (CheckModuleUpToDateLocal())
return true;
else if (DownloadComponentData())
if(InstallModuleLocal())
return true;
return false;
}
}
var availableModules = new List<Module>();
... // Add several 'Modules' to list
var installed = availableModules.Where(m => m.EnsureModuleLocalInstall());
我既设置了断点,也检查了预期的结果(本地安装的模块),但从所有迹象来看,方法“EnsureModuleLocalInstall”没有被执行。
我是否遗漏了一些明显的东西,或者我对 LINQ“Where”方法的期望过高并且应该使用 LINQ ForEach?
最佳答案
Where
方法是使用 deferred execution 实现的,因此在您迭代结果之前,查询实际上不会运行。获取已安装模块列表的最简单方法是在查询返回值上调用 ToList
:
var installed = availableModules.Where(m => m.EnsureModuleLocalInstall()).ToList();
关于c# - 为什么方法不会从 LINQ Where 方法中执行,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34712082/