我需要存储一个<string, byte[]>
对来创建zip文件(我执行一个异步下载函数,它返回文件的字节数组,我从解析URL得到文件名)
到目前为止,我一直在使用字典进行测试,但我知道最终我们还需要其他东西,因为文件名不是唯一的。
我确定我遗漏了一些简单的东西,但我不能为我的生活想到一个存储非唯一<TValue, TValue>
对的Enumerable对象集合。
代码示例
public async Task<ZipFile> CreateZipFormUrls(List<string> urlList)
{
using (var zip = new ZipFile())
{
var files = await ReturnFileDataAsync(urlList);
foreach (var file in files)
{
var e = zip.AddEntry(file.Key, file.Value);
}
return zip;
}
}
async Task<Dictionary<string, byte[]>> ReturnFileDataAsync(IEnumerable<string> urls)
{
using (var client = new HttpClient())
{
var results = await Task.WhenAll(urls.Select(async url => new
{
Key = Path.GetFileName(url),
Value = await client.GetByteArrayAsync(url),
}));
return results.ToDictionary(x => x.Key, x => x.Value);
}
}
答案 0 :(得分:3)
您可以使用List<Tuple<string, byte[]>>
...或者我个人强烈考虑为此创建自定义类 - 然后只列出它们。
使用自定义类而不是Tuple
的优势在于,您可以为属性提供合理的名称 - 并且可能会添加类似于为数据返回Stream
的方法。
我会不在这里使用KeyValuePair
,除非该字符串确实是一个关键字。如果这些名字不是唯一的,那么它们听起来就像是我的钥匙。