c# - 为什么方法不会从 LINQ Where 方法中执行

标签 c# linq

在控制台应用程序中,从主类程序中的静态方法,我调用:

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/

相关文章:

c# - 我们如何在 ASP.NET Web API 中记录身份验证 token 请求

asp.net-mvc - "In clause"通过 LINQ to SQL

xml - LINQ to XML 查询属性

c# - 返回匿名类型列表的方法使用什么返回类型?

c# - 有效跳过二维字符串数组中的空白行

c# - 在 C#/Linq 中搜索子类型的集合

c# - 公开课 - "is inaccessible due to its protection level. Only public types can be processed."

c# - 为什么 BackgroundWorker 总是很忙?

c# - 使用多个连接将 linq 转换为 lambda

c# - 将数组传递给自定义 MSBuild 任务