C#列表<>;索引超出范围

本文关键字:索引 范围 gt 列表 lt | 更新日期: 2023-09-27 17:58:56

List<String> list_sub = new List<String> ();
int i = 0;
using(SqlConnection sqlConnection = new SqlConnection(connString)) {
    SqlCommand sqlCmd = new SqlCommand("SELECT SUB FROM Reque WHERE FORMAT = '" + format + "' AND CLIENTE = '" + client + "' AND CRIT = 'Cal'", sqlConnection);
    sqlConnection.Open();
    SqlDataReader sqlReader = sqlCmd.ExecuteReader();
    while (sqlReader.Read()) {
        list_sub[i] = sqlReader["SUB"].ToString();
        i = i + 1; //Count
    }
    sqlReader.Close();
    sqlConnection.Close();
}

此代码引发错误:

索引超出范围。必须是非负的并且小于收藏。

我用一个数组:

string[] list_sub = new string[20];

并且工作得很好,但没有列表(我读到列表更擅长这项任务…(

我认为列表的工作原理与数组几乎相同,我缺少什么?

更新:

在用SQL数据填充listrongub之后,我想更改一些文本框的文本(这就是为什么我需要I,我需要知道导入了多少值(

这是代码(用listrongub数据填充txtbox(:

int y = 0;
var textsarray = new TextBox[] {
    txt_sub1, txt_sub2, txt_sub3, txt_sub4, txt_sub5, txt_sub6, txt_sub7,
    txt_sub8, txt_sub9, txt_sub10, txt_sub11, txt_sub12, txt_sub13, txt_sub14, txt_sub15,
    txt_sub16, txt_sub17, txt_sub18, txt_sub19, txt_sub20
};
foreach(TextBox txt in textsarray) {
    txt.Text = list_sub[y];
    y = y + 1;
}

C#列表<>;索引超出范围

您的问题在这里:

list_sub[i] = sqlReader["SUB"].ToString();

您将List<t>视为一个预先确定大小的数组。您只需要这样做就可以将项目添加到数组中:

list_sub.Add(sqlReader["SUB"].ToString());

此外,看起来您甚至不再需要索引变量i,除非您省略了一些代码。