非字典值可枚举的值

本文关键字:枚举 字典 | 更新日期: 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,除非字符串真的意味着一个键。如果这些名字不是唯一的,我觉得它们听起来就不像钥匙。