Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/259.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 有没有更有效的方法循环浏览多个列表_C#_.net - Fatal编程技术网

C# 有没有更有效的方法循环浏览多个列表

C# 有没有更有效的方法循环浏览多个列表,c#,.net,C#,.net,我有4个字符串列表-它们的长度都相同 var nameList; var dateList; var versionList; var downloadList; 我目前正在逐个遍历每个列表,然后将每个列表的内容添加到一个并发队列中 var concurrentNameQueue= new ConcurrentQueue<string>(); var concurrentDateQueue= new ConcurrentQueue<string>(); var conc

我有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);
}
var concurrentNameQueue=new ConcurrentQueue();
var concurrentDateQueue=new ConcurrentQueue();
var concurrentVersionQueue=新ConcurrentQueue();
var concurrentDownloadQueue=new ConcurrentQueue();
foreach(名称列表中的变量名称)
{
concurrentNameQueue.enque(名称);
}
foreach(日期列表中的var日期)
{
concurrentDateQueue.enque(日期);
}
foreach(版本列表中的var版本)
{
concurrentVersionQueue.enque(版本);
}
foreach(下载列表中的var下载)
{
concurrentDownloadQueue.enque(下载);
}
这个过程似乎非常重复,让我想知道是否有一种更有效的方法来循环浏览所有这些列表


有没有更有效的方法

使用具有多个属性的数据结构,而不是制作多个列表

这就是OOP的优点。而是创建一个列表

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

使用具有多个属性的数据结构,而不是制作多个列表

这就是OOP的优点。而是创建一个列表

public class DownloadItem
{
    public string Name { get; set; }
    public string Date { get; set; }
    public string Version { get; set; }
    public string Download { get; set; }
}
  • 您可以编写一个扩展方法,然后调用它:

    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);
    
    公共静态void排队(此ConcurrentQueue队列,IEnumerable项)
    {
    foreach(项目中的var项目)
    排队。排队(项目);
    }
    concurrentNameQueue.Enqueue(名称列表);
    concurrentDateQueue.Enqueue(日期列表);
    concurrentVersionQueue.Enqueue(版本列表);
    concurrentDownloadQueue.Enqueue(下载列表);
    
  • 或者在初始化上面的列表时,使用需要
    IEnumerable
    作为输入的:

    var concurrentNameQueue = new ConcurrentQueue<string>(nameList);
    var concurrentDateQueue = new ConcurrentQueue<string>(dateList);
    var concurrentVersionQueue = new ConcurrentQueue<string>(versionList);
    var concurrentDownloadQueue = new ConcurrentQueue<string>(downloadList);
    
    var concurrentNameQueue=新的ConcurrentQueue(名称列表);
    var concurrentDateQueue=新的ConcurrentQueue(日期列表);
    var concurrentVersionQueue=新的ConcurrentQueue(versionList);
    var concurrentDownloadQueue=新的ConcurrentQueue(下载列表);
    

  • 但正如我在评论中提到的,您似乎应该创建一个包含4个属性的类,分别为name、date、version和download创建一个属性。然后你有一个类的列表,而不是保持4个列表同步

  • 您可以编写一个扩展方法,然后调用它:

    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);
    
    公共静态void排队(此ConcurrentQueue队列,IEnumerable项)
    {
    foreach(项目中的var项目)
    排队。排队(项目);
    }
    concurrentNameQueue.Enqueue(名称列表);
    concurrentDateQueue.Enqueue(日期列表);
    concurrentVersionQueue.Enqueue(版本列表);
    concurrentDownloadQueue.Enqueue(下载列表);
    
  • 或者在初始化上面的列表时,使用需要
    IEnumerable
    作为输入的:

    var concurrentNameQueue = new ConcurrentQueue<string>(nameList);
    var concurrentDateQueue = new ConcurrentQueue<string>(dateList);
    var concurrentVersionQueue = new ConcurrentQueue<string>(versionList);
    var concurrentDownloadQueue = new ConcurrentQueue<string>(downloadList);
    
    var concurrentNameQueue=新的ConcurrentQueue(名称列表);
    var concurrentDateQueue=新的ConcurrentQueue(日期列表);
    var concurrentVersionQueue=新的ConcurrentQueue(versionList);
    var concurrentDownloadQueue=新的ConcurrentQueue(下载列表);
    


  • 但正如我在评论中提到的,您似乎应该创建一个包含4个属性的类,分别为name、date、version和download创建一个属性。然后,您有一个类的列表,而不是保持4个列表同步。

    看起来,代替4个列表,您可能需要考虑一个具有4个属性的类,然后一个类的列表也在哪里初始化队列?我更新了我的帖子,包括队列的初始化,似乎不是4个列表,你可能想考虑一个有4个属性的类,还有一个类的列表,你在哪里初始化队列?我更新了我的帖子,包括了queues@LostBoy-那肯定是一个更好的选择design@LostBoy-这肯定是一个更好的设计