2 qq 29651709 qq_29651709 于 2015.07.24 08:40 提问

C#其他信息: 索引超出了数组界限。
c#
private void button1_Click(object sender, EventArgs e)
    {
        string str = richTextBox1.Text;
        string[] lines = str.Split(Environment.NewLine.ToCharArray());
        for (int i = 1; i < lines.Length; i++)
        {
            Console.WriteLine(lines[i]);
            string[] linecell = lines[i].Split(new char[] { ',' });
            if (linecell.Length > 2) { richTextBox2.Text = richTextBox2.Text + "\r\n" + linecell[2]; } //读取出身份证号码
            string aaa = AES.AESEncrypt(richTextBox2.Text);
            richTextBox2.Text = aaa + "\r\n";
            //对身份证号码进行加密   
        }
    }
            其实string aaa = AES.AESEncrypt(richTextBox2.Text);应该是string aaa = AES.AESEncrypt(linecell[2]); 但是提示我其他信息: 索引超出了数组界限。
            该怎么改。。

9个回答

u010882878
u010882878   2015.07.24 16:17
已采纳

你最后应该是 richTextBox2.Text = richTextBox2.Text + aaa + "\r\n";

qq_29651709
qq_29651709 谢谢,可以了,加个QQ好友吧 330837266
2 年多之前 回复
qq_29651709
qq_29651709 这样的话也是第一行数据11010719860106001xG9CWM0wxOFQnrpyoOFz/1dbYw3yVb5tJl0xF1LIWO6c= ,这是加密前的和加密后的都有了? 第二行到第五行也是这样的
2 年多之前 回复
CSDNXIAOD
CSDNXIAOD   2015.07.24 08:43

System.IndexOutOfRangeException: 索引超出了数组界限
运行时报"索引超出数组界限",如何解决!!!
索引超出了数组界限(Microsoft.SqlServer.Smo)
----------------------biu~biu~biu~~~在下问答机器人小D,这是我依靠自己的聪明才智给出的答案,如果不正确,你来咬我啊!

taomanman
taomanman   Rxr 2015.07.24 08:55

在编程语言里,起始编号大都是从0开始的,而你从1开始的,会出现索引越界错误的

private void button1_Click(object sender, EventArgs e)
{
string str = richTextBox1.Text;
string[] lines = str.Split(Environment.NewLine.ToCharArray());
for (int i = 0; i < lines.Length; i++) //**这里索引从0开始就行了**
{
Console.WriteLine(lines[i]);
string[] linecell = lines[i].Split(new char[] { ',' });
if (linecell.Length > 2) { richTextBox2.Text = richTextBox2.Text + "\r\n" + linecell[2]; } //读取出身份证号码
string aaa = AES.AESEncrypt(richTextBox2.Text);
richTextBox2.Text = aaa + "\r\n";
//对身份证号码进行加密

}
}

qq_29651709
qq_29651709 要是从0开始,我第一行的标题也会输入进去,而我不想要标题的,而且现在我问的是linecell[2]如何加入进去
2 年多之前 回复
xuehuapiaoyi88
xuehuapiaoyi88   2015.07.24 08:57

private void button1_Click(object sender, EventArgs e)
{
string str = richTextBox1.Text;
string[] lines = str.Split(Environment.NewLine.ToCharArray());
for (int i = 0; i < lines.Length; i++)
{
Console.WriteLine(lines[i]);
string[] linecell = lines[i].Split(new char[] { ',' });
if (linecell.Length > 2) { richTextBox2.Text = richTextBox2.Text + "\r\n" + linecell[2]; } //读取出身份证号码
string aaa = AES.AESEncrypt(richTextBox2.Text);
richTextBox2.Text = aaa + "\r\n";
//对身份证号码进行加密

}
}

qq_29651709
qq_29651709 i不能=0啊
2 年多之前 回复
u010882878
u010882878   2015.07.24 11:59
 if (linecell.Length > 2) { richTextBox2.Text = richTextBox2.Text + "\r\n" + linecell[2]; } //读取出身份证号码


 string aaa = AES.AESEncrypt(linecell[2]);

在 判断 的外面

linecell 的 item的数量可能少于3个
这里的 linecell[2] 超出了边界,

qq_29651709
qq_29651709 回复KINGX: 能给点代码吗。。
2 年多之前 回复
u010882878
u010882878 回复qq_29651709: 如果是这样,那么就是因为 lines 的 个数是1 其最大下标是 0, 而你上了就是 1 , 所以出现问题, 建议你从 0 遍历 , 先判断 i 是否 > 0 在 执行后面的代码!
2 年多之前 回复
qq_29651709
qq_29651709 回复KINGX: Console.WriteLine(lines[i]);这句话就提示 其他信息: 索引超出了数组界限。
2 年多之前 回复
u010882878
u010882878 回复qq_29651709: 怎么个不对发? 设置断点 F5 Debug 看一下
2 年多之前 回复
qq_29651709
qq_29651709 不行啊 ,执行出来的数据不对
2 年多之前 回复
u010882878
u010882878 回复qq_29651709: 你放到 if 花括号里面啊,不足3个就不要执行那句了
2 年多之前 回复
qq_29651709
qq_29651709 那应该怎么办。有其他数字都是错、、、
2 年多之前 回复
u010882878
u010882878   2015.07.24 15:34
 private void button1_Click(object sender, EventArgs e)
        {
            string str = richTextBox1.Text;
            string[] lines = str.Split(Environment.NewLine.ToCharArray());

            for (int i = 1; i < lines.Length; i++)  // 至少要有 2个才会执行下面的代码
            {

                Console.WriteLine(lines[i]);
                string[] linecell = lines[i].Split(new char[] { ',' });
                if (linecell.Length > 2)  //最少有3个元素   linecell[2] 就是第3个元素
                {
                    richTextBox2.Text = richTextBox2.Text + "\r\n" + linecell[2];
                    string aaa = AES.AESEncrypt(linecell[2]);
                    richTextBox2.Text = aaa + "\r\n";
                }
                else
                {
                    //当少于3个的情景
                }

                //另外 我看了下, 就算用你的代码,也不应该报告下标超出范围啊
            }

        }

你的代码也不应该出问题啊!

qq_29651709
qq_29651709 你这样的结果完全不是我想要的,。。 我截图在下面说的更详细点吧
2 年多之前 回复
qq_29651709
qq_29651709   2015.07.24 15:55

如果没有 string aaa = AES.AESEncrypt(linecell[2]); richTextBox2.Text = aaa + "\r\n"; 这两句话,图片说明 这显示结果没错,但是一加,成你说的那样,图片说明 成这样了,完全不是想要的结果啊,我想要的上把图一里面的身份证都加密了

qq_29651709
qq_29651709 回复KINGX: 加了一个+,然后第一行数据11010719860106001xG9CWM0wxOFQnrpyoOFz/1dbYw3yVb5tJl0xF1LIWO6c= ,这是加密前的和加密后的都有了? 第二行到第五行也是这样的
2 年多之前 回复
u010882878
u010882878 还有 richTextBox2.Text = aaa + "\r\n"; 这一行 应该是 richTextBox2.Text += aaa + "\r\n";
2 年多之前 回复
qq_29651709
qq_29651709 。。。 这是我把那个框拉小了,拉大了是一样的
2 年多之前 回复
u010882878
u010882878 回复KINGX: 貌似是你的数据结构有问题 每行3列 变成了 2行 4列
2 年多之前 回复
qq_29651709
qq_29651709 回复KINGX: 对对对
2 年多之前 回复
u010882878
u010882878 回复qq_29651709: 一个一行? 对么
2 年多之前 回复
qq_29651709
qq_29651709 回复KINGX: 不是 我只要输出那边身份证下面比如11010819790221001X加密后的信息
2 年多之前 回复
u010882878
u010882878 是否是输出 1,测试, abcdef_f3ew \r\n 这样的 一行一行的信息呢?
2 年多之前 回复
sina_2831808769
sina_2831808769   Rxr 2015.07.25 13:39

最后应该是 richTextBox2.Text = richTextBox2.Text + aaa + "\r\n";

miracle_yao
miracle_yao   2015.07.28 11:07

linecell[2]
这是取linecell数组的第三个元素,那么你的本意是要取第三个元素吗?

Csdn user default icon
上传中...
上传图片
插入图片