C# 将不同的随机字符组合成一个字符串

C# 将不同的随机字符组合成一个字符串,c#,random,C#,Random,我正在编写一个C#应用程序,它应该生成一个随机密码。我的想法是使用“随机”生成10个不同的字符,并将它们组合成一个字符串 所以我做了这个方法,它返回一个随机字符: public static string RandomChar() { Random random = new Random(); var chars ="$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToC

我正在编写一个C#应用程序,它应该生成一个随机密码。我的想法是使用“随机”生成10个不同的字符,并将它们组合成一个字符串

所以我做了这个方法,它返回一个随机字符:

public static string RandomChar()
{
    Random random = new Random();
    var chars ="$%#@!*abcdefghijklmnopqrstuvwxyz1234567890?;:ABCDEFGHIJKLMNOPQRSTUVWXYZ^&".ToCharArray();
    string indexValue = chars.GetValue(random.Next(chars.Length)).ToString();           
    return indexValue;
}
到目前为止,此方法的效果与预期一致

然后我使用以下方法生成一个包含10个随机字符的字符串:

public static string RandomPwd()  
{
    string Pwd = "";
    for(int i = 0; i < 11; i++)
    {
        Pwd= Pwd + RandomChar();
    }
    return Pwd;
}
“a”将始终是一个由相同字符组成的10个字符长的字符串,如“uu”

但如果我在以下位置设置断点:

    for(int i = 0; i < 11; i++)
    {
        Pwd= Pwd + RandomChar();
    }
    return Pwd;
现在是10个字符长的不同字符

因此,只要我手动执行,应用程序看起来运行良好,但如果我不执行,则不会进行不同的随机操作

我在谷歌和这里搜索过这个问题,但我找不到任何解决我问题的方法

也许其他人以前也经历过这种情况,并会分享他的解决方案


非常感谢

您需要使用
Random Random=new Random()

new Random()。在紧循环中调用Next(…)
通常会产生相同的数字



不要在快速调用的方法中创建
随机
。它的种子取自系统时钟,其粒度约为50毫秒。哇,我不知道!感谢您的快速响应和帮助。@MatthewWatson您可以在.NETCore中轻松应对。我还不知道细节,但当我为这类问题创建一个片段以在.NET Core中演示该问题时,我得到了不同的数字。@tymtam哦,他们得到了!那很好。很高兴看到他们在.NETCore中解决了这个问题-特别是考虑到人们犯这个错误的次数!这是完全错误的。@eocron嘿,谢谢你的反馈,哪一部分是错误的?这解释了问题,但不是答案。你的答案很模糊,它没有给出发生这种情况的原因,可以做什么,只是包含了无效的示例(尽管它对于查明问题是有效的)。另外,问题已经标记为重复,链接有很好的解释,所以重复是没有意义的。@eocron Ok,所以您认为它可以改进,或者这是没有必要的。这与“错误”不同:
    for(int i = 0; i < 11; i++)
    {
        Pwd= Pwd + RandomChar();
    }
    return Pwd;
string a = RandomwPwd();
for(int i = 0; i< 10; i++)
{
     Random random = new Random();
     Console.WriteLine(random.Next(0,100));
}
17
17
17
17
17
17
17
17
17
17