为什么我得到system.argumentoutofrangeexception

本文关键字:system argumentoutofrangeexception 为什么 | 更新日期: 2023-09-27 18:16:35

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

我知道这个错误说我试图达到我的循环之外的东西,你能指出我哪里出错了,请给任何指针,以改变等。

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();
        }
    }
}

为什么我得到system.argumentoutofrangeexception

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

这是重现错误的最小代码

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

注意:你的代码有很多其他的错误,但这就是为什么你会得到你看到的错误。