非字典值可枚举的值
本文关键字:枚举 字典 | 更新日期: 2023-09-27 18:18:47
我需要存储用于创建zip文件的<string, byte[]>
对(我执行一个异步下载函数,该函数返回文件的字节数组,并通过解析URL获得文件名)
到目前为止,我一直在使用字典进行测试,但我知道最终我们需要其他东西,因为文件名不是唯一的。
我肯定我错过了一些简单的东西,但我不能为我的生活想到一个可枚举对象集合存储一个非唯一的<TValue, TValue>
对。
代码示例
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);
}
}
您可以使用List<Tuple<string, byte[]>>
…或者我个人强烈考虑为此创建一个自定义类-然后只是有一个它们的列表。
使用自定义类而不是Tuple
的优点是,您可以为属性提供合理的名称—并且可能添加诸如返回数据的Stream
的方法之类的东西。
我将不在这里使用KeyValuePair
,除非字符串真的意味着一个键。如果这些名字不是唯一的,我觉得它们听起来就不像钥匙。