C# 为什么我得到System.ArgumentOutOfRangeException?

C# 为什么我得到System.ArgumentOutOfRangeException?,c#,arrays,string,loops,C#,Arrays,String,Loops,我已经阅读了与我类似的问题,但还没有找到解决方案来指出我的问题,或者让我更容易找到 我知道错误表明我试图从我的循环中找到一些东西。你能指出我哪里出了问题吗?请给我一些指示,告诉我应该改变什么 public int passSize; public string availableChars = "AaBbCcDdEeFfGgHhIuJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789!£$%^&*()_-+=;:'@#~{[]}/?.>,<

我已经阅读了与我类似的问题,但还没有找到解决方案来指出我的问题,或者让我更容易找到

我知道错误表明我试图从我的循环中找到一些东西。你能指出我哪里出了问题吗?请给我一些指示,告诉我应该改变什么

public int passSize;
public string availableChars = "AaBbCcDdEeFfGgHhIuJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789!£$%^&*()_-+=;:'@#~{[]}/?.>,<|¬`";

private void button1_Click(object sender, EventArgs e)
{
    textBox1.Text = "";

    for (int i = 1; i < 9; i++)
    {
        if (passSize == 0)
            MessageBox.Show("You must select a password size", "Error");
        else if (passSize == i)
        {
            StringBuilder sb = new StringBuilder("");
            Random random = new Random();
            int r = random.Next(0, availableChars.Length - 1);
            sb[i] = availableChars[r];
            textBox1.Text = sb.ToString();
        }
    }
}

基本上,你的sb只和它里面的文本一样大,所以当你试图设置第i个字符时,你会遇到问题,因为数组还没有那么大

这是复制错误的最小代码

var sb = new StringBuilder("");
sb[6]='a'; //Will throw

注意:你的代码还有很多其他错误,但这就是你看到错误的原因。

你试过了吗?对不起,我应该更准确一点,这就是问题发生的地方sb[I]=availablecars[r];阅读StringBuilder的文档。你应该使用它的方法。sb[i]不正确-还没有元素i存在。添加快速修复追加,我将向上投票。