Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/327.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#_Arrays_List - Fatal编程技术网

C# 如果第一个阵列忙,则在下一个阵列上工作的阵列的动态列表

C# 如果第一个阵列忙,则在下一个阵列上工作的阵列的动态列表,c#,arrays,list,C#,Arrays,List,好的,我有一个数组列表,其中每个数组包含一定数量的数据: static List<string[]> result = Etikeketter(arrEtikets, 20); 当涉及到如何处理FirstOrDefault数组中的数据时,它会按预期工作 我的问题是,在运行它时,它将只从我的结果[0]中获取数据,因此它不会从结果[x]中打印数据 当布尔值为true时,我尝试使用if语句处理作业请求,但这也会执行相同的操作,仍然只打印结果[0] 在第一个阵列忙时,如何让它在下一个阵列中

好的,我有一个数组列表,其中每个数组包含一定数量的数据:

static List<string[]> result = Etikeketter(arrEtikets, 20);
当涉及到如何处理FirstOrDefault数组中的数据时,它会按预期工作

我的问题是,在运行它时,它将只从我的结果[0]中获取数据,因此它不会从结果[x]中打印数据

当布尔值为true时,我尝试使用if语句处理作业请求,但这也会执行相同的操作,仍然只打印结果[0]


在第一个阵列忙时,如何让它在下一个阵列中工作,您有什么想法吗?

是否正在寻找嵌套的for循环

foreach(var etiketGroup in listOfEtiketGroups)
{
    foreach (var item in etiketGroup)
    {
        Console.WriteLine(item);
    }
}
据我所知,你的第一个错误就在这里 bool isGroupUsed=false

while (isGroupUsed == false)
{
    ....
    var firstAvailableGroup = listOfEtiketGroups.FirstOrDefault();
    **isGroupUsed = true;**
    ....
}
在循环的第一个过程中,您将变量设置为TRUE,当然,循环停止

如果不使用多线程,为了将数组标记为繁忙,我建议使用下一种结构:

public class MarkedArray {
        public MarkedArray(  int size ) {
              Busy = false;
              Array = new string[size];
        }
        public bool Busy {get;set;}
        public string[] Array  {get;set;}
}

static List<MarkedArray> result = Etikeketter(arrEtikets, 20);

您必须为每个组使用一个isused,而不仅仅是1,否则一个组正在使用,它不会说如果您不使用多线程,数组为什么会忙?为什么不迭代列表?它只与结果[0]交互,因为这正是您要它做的。在获取结果[0]FirstOrDefault之后,将isGroupUsed设置为true,从而在该迭代之后停止while循环。1。阵列如何能够自己忙碌?2.FirstOrDefault始终返回第一个元素结果[0],因为您尚未指定任何谓词。此外,它将始终是同一个元素,因为处理后不会将其从结果中删除。您的第一个解决方案是什么,我正在寻找什么,因为我正在尝试使用多线程,但我不确定如何执行代码,使其在0上工作,然后根据需求继续在1、2等上工作,您可能需要使用互斥锁:
public class MarkedArray {
        public MarkedArray(  int size ) {
              Busy = false;
              Array = new string[size];
        }
        public bool Busy {get;set;}
        public string[] Array  {get;set;}
}

static List<MarkedArray> result = Etikeketter(arrEtikets, 20);