C# - 随机化四个字符串的大小写的函数总是 returns 每个字符串在相同的大小写

C# - Function to randomise case of four strings always returns each string in the same case

我正在尝试构建一个 Windows 形式的基本随机密码生成器。我有一个单词列表(全部小写),其中四个是随机选择的。每个单词都传递给一个函数以随机更改大小写(将第一个字符大写,将整个单词大写,或者只是 return 小写的字符串)然后添加到另一个列表中,如下所示:

var dictionary = new List<String> { "aaron", "abandoned", "aberdeen" etc... };
int index;
index = random.Next(dictionary.Count);
string one = dictionary[index];
one = randomCase(one);
pwarray.Add(one);

然后为字符串 twothreefour 复制此代码。我在不花哨的情况下随机化案例的功能是这样的:

        private string randomCase (string word)
        {
            string changed;
            Random r = new Random();
            int n = r.Next(1, 29);

            // Output number to check it's not the same each time
            MessageBox.Show(n.ToString());
            if (n >= 1 || n <= 9)
            {
                // First letter capatalised
                changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
                return changed;
            }
            else if (n >= 10 || n <= 19)
            {
                // Word capitalised 
                changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
                return changed;
            }
            else if (n >= 20 || n <= 29)
            {
                // Word left as lower case
                return word;
            }

            return null;
        }

我添加了输出消息框来显示随机数 n 是什么,以帮助进行故障排除。当我 运行 应用程序时,我从我的 randomCase 函数中得到不同的数字 n:

4 - 第一个字符大写

17 - 单词大写

20 - 单词保留为小写

24 - 保留为小写的单词

但是所有四个单词的第一个字母都大写了:

:

我生成了很多密码,它们似乎总是以相同的方式出现 - 只有第一个字母大写。谁能提供任何建议?

您应该在 class 中创建一个 Random 实例,或者您需要在每次创建它时都为它播种。您还应该使用 && 因为您希望 if 中的两个测试都成立。

如果我使用下面的代码:

    private static string randomCase(string word)
    {
        string changed;
        Random r = new Random(Guid.NewGuid().GetHashCode());
        int n = r.Next(1, 29);

        // Output number to check it's not the same each time
        //MessageBox.Show(n.ToString());
        //Console.WriteLine(n.ToString());
        if (n >= 1 && n <= 9)
        {
            // First letter capatalised
            changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToLower());
            return changed;
        }
        else if (n >= 10 && n <= 19)
        {
            // Word capitalised 
            changed = System.Globalization.CultureInfo.CurrentCulture.TextInfo.ToTitleCase(word.ToUpper());
            return changed;
        }
        else if (n >= 20 && n <= 29)
        {
            // Word left as lower case
            return word;
        }

        return null;
    }
    public static void Main(string[] args)
    {
        //Your code goes here
        for (int i = 0; i < 10; i++)
            Console.WriteLine(randomCase("heLLo"));
    }

我将得到以下输出:

HELLO
HELLO
Hello
heLLo
HELLO
Hello
Hello
HELLO
HELLO
HELLO