我正在尝试在列表中添加列表。但我无法从子列表中检索项目。没有错误,但没有从子列表中检索数据。请关注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]
答案 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();
}
}
}