在以下代码中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/