2017-10-29 28 views
0

我有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); 
} 

这个过程似乎非常重复性的和让我不知道是否有循环更有效的方式通过所有这些名单

有没有更有效的方法来做到这一点?

+1

看来,你可能想要考虑一个具有4个属性的类,然后是类的一个列表 –

+0

而不是4个列表你还需要初始化队列吗? –

+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. 或者因为你是初始化列表正上方,然后使用需要的second constructor作为输入的IEnumerable<T>

    var concurrentNameQueue = new ConcurrentQueue<string>(nameList); 
    var concurrentDateQueue = new ConcurrentQueue<string>(dateList); 
    var concurrentVersionQueue = new ConcurrentQueue<string>(versionList); 
    var concurrentDownloadQueue = new ConcurrentQueue<string>(downloadList); 
    

但正如我在我的评论中提到的,你应该创建一个具有4个属性的类,每个属性名称,日期,版本和下载各一个。然后你有一个该类的列表,而不是保持4个列表同步。

+0

创建一个具有4个属性的类的欢呼声诀窍 –

+0

@LostBoy - 这当然是一个更好的设计 –

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; } 
} 
相关问题