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)
任何建议都会有所帮助.
两者之间的区别在于,在您拥有的第一个代码示例List<PatternInfo>中,列表中的所有项目都已填充 - 然后您将此列表返回为IEnumerable<PatternInfo>.
在第二个示例中,您有一个IEnumerable<PatternInfo>- 这只会在您第一次迭代枚举时加载模式.
如果你想要第二个版本是等效的(急切加载模式),那么添加一个ToList():
return patterns.ToList();
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
883 次 |
| 最近记录: |