C# 非字典值可枚举

C# 非字典值可枚举,c#,C#,我需要存储一个对来创建zip文件(我执行一个异步下载函数,返回文件的字节数组,并通过解析URL获得文件名) 到目前为止,我一直在使用字典进行测试,但我知道最终我们还需要其他东西,因为文件名不是唯一的 我确信我遗漏了一些简单的东西,但我一辈子都想不出一个可枚举对象集合,它存储一个非唯一的对 代码示例 public async Task<ZipFile> CreateZipFormUrls(List<string> urlList) { using (var zip

我需要存储一个
对来创建zip文件(我执行一个异步下载函数,返回文件的字节数组,并通过解析URL获得文件名)

到目前为止,我一直在使用字典进行测试,但我知道最终我们还需要其他东西,因为文件名不是唯一的

我确信我遗漏了一些简单的东西,但我一辈子都想不出一个可枚举对象集合,它存储一个非唯一的

代码示例

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);
    }
}
public异步任务CreateZipFormUrls(List-urlist)
{
使用(var zip=new ZipFile())
{
var files=await ReturnFileDataAsync(urlList);
foreach(文件中的var文件)
{
var e=zip.AddEntry(file.Key,file.Value);
}
返回拉链;
}
}
异步任务ReturnFileDataAsync(IEnumerable URL)
{
使用(var client=new HttpClient())
{
var results=await Task.WhenAll(url.Select)(异步url=>new
{
Key=Path.GetFileName(url),
Value=wait client.GetByteArrayAsync(url),
}));
返回results.ToDictionary(x=>x.Key,x=>x.Value);
}
}

您可以使用
列表
。。。或者我个人强烈地考虑为这个用户创建一个自定义类,然后只列出它们的一个类。 与
Tuple
相比,使用自定义类的优势在于,您可以为属性指定合理的名称,并且可能会添加一些东西,比如为数据返回


我不会在这里使用
KeyValuePair
,除非字符串真的是一个键。如果名称不是唯一的,那么对我来说它们听起来就不像是键。

一个
列表如何?
?文件名如何不是唯一的?它们在文件系统上必须是唯一的,
KeyValuePair
不也强制使用唯一的值吗?我将遇到与我假设的相同的问题。@Wesley不,
Dictionary
强制执行唯一性,KVP在列表中彼此不了解。@Wesley似乎只需要使用查找而不是Dictionary
return results.ToLookup(x=>x.Key,x=>x.Value)(当然方法的返回类型也应该更改)我担心自定义类的效率问题。有没有不使用元组的理由?@Wesley Readability。处理
Item1
Item2
总是不如类属性可读。@Wesley:当您使用
Item1
Item2
而不是(比如)
Name
Content
时,代码就不那么清晰了。您关心的是什么具体的效率问题?@Wesley如果不知道您是如何使用数据结构的,我们就不可能从有效的角度知道适当的数据结构是什么。@Wesley:那么,您认为效率低下的原因是什么,以及是什么?我看不出有任何理由认为您自己的类的效率低于
Tuple