子列表项未在C#中显示

时间:2017-11-08 15:03:34

标签: c# loops for-loop unity3d foreach

我正在尝试在列表中添加列表。但我无法从子列表中检索项目。没有错误,但没有从子列表中检索数据。请关注SELECT * FROM table_a a INNER JOIN table_b b ON a.id = b.table_a_id WHERE b.voided = true 我认为错误就在那里。

当我尝试使用GenerateClue()访问数据时,没有数据

clueList[0][0]

3 个答案:

答案 0 :(得分:2)

问题在于,当您将线索添加到线索列表时,它实际上正在做的是传递引用,因为List<>是一个班级。所以你最终只有2个变量指向同一个内存。一个是你的线索变量,另一个是clueList [X]。因此,当您调用clue.Clear()时,您正在清除线索列表,该列表实际上与您的线索列表[X]相同。

正如修复一样,改变一下:

if (clue.Count == 3)
{
    clueList.Add(clue);
    clue.Clear();
}

进入这个:

if (clue.Count == 3)
{
    clueList.Add(new List<int>(clue));
    clue.Clear();
}

答案 1 :(得分:1)

你的问题在这里:

if (clue.Count == 3)
{
    clueList.Add(clue);
    clue.Clear();
}

您正在向clue添加clueList,然后清除具有相同&#34;内存地址的clue&#34}。 (与clueList中的对象相同。)

所以一般情况下,您在clue列表中填入一些随机数字,然后只要它再填充为空,您就可以清除它。

相反,请尝试在第一个int的开头创建for-loop的新列表。

for (int j = 0; j <= 5; j++)
{
    var list = new List<int>();
    for (int i = 0; i <= 2; i++)
    {
        int randomNumber = random.Next(0, 9);
        if (list.Contains(randomNumber))
        {
            i--;
        }
        else
        {
            list.Add(randomNumber);
        }

        if (list.Count == 3)
        {
            clueList.Add(list);
        }
    }
}

答案 2 :(得分:0)

您需要创建列表的副本,以避免Clear()调用对放在clueList中的元素进行操作。

if (clue.Count == 3)
   {
       clueList.Add(clue.ToList());
       clue.Clear();
   }

但是我也认为可能存在不插入列表的情况,因为可能存在随机数总是相同且你继续走出for循环的情况。

for (int j = 0; j <= 5; j++)
        {
            for (int i = 0; i <= 2; i++)
            {
                int randomNumber = random.Next(0, 9);
                if (clue.Contains(randomNumber))
                {
                    i--;
                }
                else
                {
                    clue.Add(randomNumber);
                }

                if (clue.Count == 3) // EDIT: what if it never reaches 3 ?
                {
                    clueList.Add(clue.ToList());
                    clue.Clear();
                }
            }
        }