想要使用LINQ而不是foreach但它不起作用

sab*_*ber 1 .net c# linq loops

在下面的代码foreach循环工作正常,但当我尝试使用LINQ而不是使用foreach它不起作用没有异常没有错误.

这段代码有效:

    public static IEnumerable<PatternInfo> LoadPatterns() {
        var directoryInfo = new DirectoryInfo(PatternFullPath);
        var dirs = directoryInfo.EnumerateDirectories();
        var result = new List<PatternInfo>();
        foreach (var info in dirs)
        {
            result.Add(new PatternInfo
                           {
                               PatternName = info.Name,
                               TemplateFileNames = GetTemplateFiles(info.FullName)
                           });
        }
        return result;
    }
Run Code Online (Sandbox Code Playgroud)

但这不是:

    public static IEnumerable<PatternInfo> LoadPatterns() {
        var directoryInfo = new DirectoryInfo(PatternFullPath);
        var dirs = directoryInfo.EnumerateDirectories();
        var patterns = dirs.Select(info => new PatternInfo {
            PatternName = info.Name,
            TemplateFileNames = GetTemplateFiles(info.FullName)
        });
        return patterns;
    }
Run Code Online (Sandbox Code Playgroud)

任何建议都会有所帮助.

Bro*_*ass 6

两者之间的区别在于,在您拥有的第一个代码示例List<PatternInfo>中,列表中的所有项目都已填充 - 然后您将此列表返回为IEnumerable<PatternInfo>.

在第二个示例中,您有一个IEnumerable<PatternInfo>- 这只会在您第一次迭代枚举时加载模式.

如果你想要第二个版本是等效的(急切加载模式),那么添加一个ToList():

return patterns.ToList();
Run Code Online (Sandbox Code Playgroud)