C#List<>指数超出范围

时间:2016-07-26 15:22:53

标签: c# wpf

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数据填充list_sub后,我想更改某些文本框的文本(这就是为什么我需要i,我需要知道导入了多少个值)

这是代码(使用list_sub数据填充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;
}

1 个答案:

答案 0 :(得分:4)

你的问题在这里:

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

您正在对List<t>这样的预尺寸数组进行处理。您只需要执行此操作即可将项添加到数组中:

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

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