是否有更有效的方法来循环遍历多个列表

时间:2017-10-29 06:02:35

标签: c# .net

我有4个字符串列表 - 这些字符串长度相同

var nameList;
var dateList;
var versionList;
var downloadList;

我目前正在单独循环遍历每个列表,然后将每个列表的内容添加到并发队列

var concurrentNameQueue= new ConcurrentQueue<string>();
var concurrentDateQueue= new ConcurrentQueue<string>();
var concurrentVersionQueue= new ConcurrentQueue<string>();
var concurrentDownloadQueue= new ConcurrentQueue<string>();

foreach (var name in nameList)
{
    concurrentNameQueue.Enqeue(name);
}

foreach (var date in dateList)
{
    concurrentDateQueue.Enqeue(date);
}

foreach (var version in versionList)
{
    concurrentVersionQueue.Enqeue(version);
}

foreach (var download in downloadList)
{
    concurrentDownloadQueue.Enqeue(download);
}

这个过程似乎非常重复,让我想知道是否有更有效的方法来遍历所有这些列表

有更好的方法吗?

2 个答案:

答案 0 :(得分:2)

  1. 您可以编写扩展方法然后调用它:

    public static void Enqueue<T>(this ConcurrentQueue<T> queue, IEnumerable<T> items)
    {
        foreach (var item in items)
            queue.Enqueue(item);
    }
    
    concurrentNameQueue.Enqueue(nameList);
    concurrentDateQueue.Enqueue(dateList);
    concurrentVersionQueue.Enqueue(versionList);
    concurrentDownloadQueue.Enqueue(downloadList);
    
  2. 或者当您正在初始化上面的列表时,请使用需要IEnumerable<T>作为输入的second constructor

    var concurrentNameQueue = new ConcurrentQueue<string>(nameList);
    var concurrentDateQueue = new ConcurrentQueue<string>(dateList);
    var concurrentVersionQueue = new ConcurrentQueue<string>(versionList);
    var concurrentDownloadQueue = new ConcurrentQueue<string>(downloadList);
    
  3. 但正如我在评论中提到的,您似乎应该创建一个包含4个属性的单个类,每个属性对应一个名称,日期,版本和下载。然后你有一个该类的列表,而不是保持4个列表同步。

答案 1 :(得分:0)

使用具有多个属性的数据结构

,而不是制作多个列表

这就是OOP的优势。创建单个列表

public class DownloadItem
{
    public string Name { get; set; }
    public string Date { get; set; }
    public string Version { get; set; }
    public string Download { get; set; }
}