c# - 想使用 LINQ 而不是 foreach 但它不起作用

标签 c# .net linq loops

在以下代码中foreach循环工作正常,但是当我尝试使用 LINQ而不是使用 foreach它不起作用没有异常(exception)没有错误。

此代码有效:

    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;
    }

但是这个不是:
    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;
    }

任何建议都会有所帮助。

最佳答案

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

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

如果您希望第二个版本是等效的(渴望加载模式),然后添加 ToList() :

return patterns.ToList();

关于c# - 想使用 LINQ 而不是 foreach 但它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7561544/

相关文章:

c# - 将 C# 用于实时应用程序

c# - 键盘记录器如何显着提高 PostMessage() 的性能

javascript - 外部 JavaScript 不工作

.net - .NET 中有 Future<T> 类型吗?

c# - 使用 LINQ 插入新的 XML 节点

c# - LINQ vs context.entity.Where()

asp.net - 如何在 LINQ 中使用 IN 运算符

c# - 如何从c#中的字符串中获取第二部分

c# - 在 RabbitMQ 中调度基本消费

c# - 每当连接或断开网络电缆时如何获取事件