我想要完成的事情看起来像这样(不是在linq中)
List<FileInfo> InfoList: ... //Already populated.
List<string> fileNames = new List<string>(InfoList.Count);
InfoList.ForEach(s => filesNames.Add(s.Name.ToString()));
上面的代码我已经写过了。我想将下一部分转化为linq。
List<ZipArchiveEntry> ZipList = new List<ZipArchiveEntry>(InfoList.Count);
for(int i = 0; i < InfoList.Count; i++)
{
ZipArchiveEntry = archive.CreateEntry(fileNames[i]);
ZipList.Add(ZipArchiveEntry);
}
所以基本上,我想知道你是否可以使用列表的元素作为函数的参数来构建对象列表。
要制作zip存档条目,我需要调用方法archive.CreateEntry(filename),文件名是我已经构建的列表的元素。
答案 0 :(得分:3)
这看似普通投影,因此Select()
是您的方法:
var ZipList = fileNames.Select(archive.CreateEntry).ToList();
顺便说一句,您的fileNames
列表可以像这样轻松创建:
var fileNames = InfoList.Select(s => s.Name.ToString()).ToList();
答案 1 :(得分:2)
您可以直接从ZipList
创建InfoList
:
var ZipList = InfoList.Select(x => archive.CreateEntry(x.Name.ToString()))
.ToList();