C# 列表C中的随机数#

C# 列表C中的随机数#,c#,random,C#,Random,你好,我的部分代码有问题。我有一个字典,键是一个数字,键的值是1-8之间的随机整数列表。由于某些原因,在添加第一个键和值之后,其他所有键的值都与第一个键的值相同。这是现在的输出,这是错误的 1: 1, 8, 6, 1, 4, 7, 2 ,4 2: 1, 8, 6, 1, 4, 7, 2 ,4 3: 1, 8, 6, 1, 4, 7, 2 ,4 4: 1, 8, 6, 1, 4, 7, 2 ,4 5: 1, 8, 6, 1, 4, 7, 2 ,4 6: 1, 8, 6, 1, 4, 7, 2 ,4

你好,我的部分代码有问题。我有一个字典,键是一个数字,键的值是1-8之间的随机整数列表。由于某些原因,在添加第一个键和值之后,其他所有键的值都与第一个键的值相同。这是现在的输出,这是错误的

1: 1, 8, 6, 1, 4, 7, 2 ,4
2: 1, 8, 6, 1, 4, 7, 2 ,4
3: 1, 8, 6, 1, 4, 7, 2 ,4
4: 1, 8, 6, 1, 4, 7, 2 ,4
5: 1, 8, 6, 1, 4, 7, 2 ,4
6: 1, 8, 6, 1, 4, 7, 2 ,4
7: 1, 8, 6, 1, 4, 7, 2 ,4
8: 1, 8, 6, 1, 4, 7, 2 ,4

我试图在将8个随机数添加到列表中后清除arrayList,但是字典中根本没有值。有人有什么建议吗。

请尝试将这一行添加到您的
randomList()
方法的开头:

private List<int> randomList() {
    for (int i = 1; i < 9; i++) {
        if (randomNum.Count < 9) {
            randomNum.Add(random.Next(1, 9));
        }
    }
    return randomNum;
}
randomNum = new List<int>();
randomNum=newlist();

有一点没有提到:始终考虑在哪里声明变量以及为什么。这样做将帮助您避免此类意外后果。在这种情况下,randomNum列表仅在randomList方法内部使用。如果在方法中声明它,则每次调用时都会重新创建它,不再有问题。

请看这篇好文章:@EmmadKareem:完全不相关。他的
Random
是在实例级别声明的,对于这样一个简单的例子来说应该足够了。@Jeroenvanevel,谢谢你的提示。我会研究你的建议。@EmmadCareem:Jon文章中描述的问题是关于创建多个连续的
Random
实例。
Random
类是伪随机的:它使用当前时间来确定种子。这意味着同时创建的两个不同实例可能会产生相同的种子,从而产生相同的随机值。在单线程应用程序中,您可以通过一次声明(例如:作为实例字段)来避免这种情况。这里的问题在我的回答中有描述。@Jeroenvanevel,明白了,谢谢。为什么作用域会成为一个问题?只有假设这些声明在类之外(导致错误),作用域才会成为问题。我认为假设它们在类中是安全的。也许我的措辞是错误的,但是如果randomNum是randomList方法的局部,它将解决问题。。。不为什么我的答案错了?是的,那会是更好的措辞。在这方面,它确实解决了问题。记住,好的答案可以解释为什么会出问题。添加解决方案是可选的,但建议这样做。下次给出一个完整的答案,你就会避免类似的情况。这不是当前的问题,但它会解决问题。明白,谢谢。我只是想指出,没有必要在使用它的唯一方法之外声明它,这可能会导致意外的后果哇,一行代码就完成了,真不敢相信我错过了,太感谢了,老兄,上帝保佑你
randomNum = new List<int>();