为什么它总是显示错误索引超出数组范围

本文关键字:数组 范围 索引 错误 显示 为什么 | 更新日期: 2023-09-27 18:00:42

我正在c#中制作一个应用程序,有一个问题让我停了下来。我的数据库表有7列,运行应用程序时需要7列。但在SingleRow[c] = data[0].ToString();行它显示了一个错误,告诉我索引超出了数组的范围。请提出建议。我的代码在下面。

public string[] RowOnly()
{
    string[] SingleRow = new string[] { };
    conn = new OleDbConnection(connStr);
    conn.Open();
    cmd = new OleDbCommand(query, conn);
    data = cmd.ExecuteReader();
    MessageBox.Show(data.HasRows.ToString());
    int i = data.FieldCount;
    while (data.Read())
    {
        for (int c = 0; c < i; c++)
        {
            SingleRow[c] = data[0].ToString();
        }                           
    }
    conn.Close();
    return SingleRow;      
}

为什么它总是显示错误索引超出数组范围

string[] SingleRow = new string[] { };

正在创建长度为0 的数组

这样做:

string[] SingleRow = new string[i];

(您必须将其移动到初始化i的行之后)

即:

int i = data.FieldCount;
string[] SingleRow = new string[i];

提示:只有当您想初始化集合时才使用{}

例如new string[]{"abc", "def"};

这解决了问题,感谢@Maximilian Ast

 public string[] RowOnly()
    {
        conn = new OleDbConnection(connStr);
        conn.Open();
        cmd = new OleDbCommand(query, conn);
        data = cmd.ExecuteReader();
        MessageBox.Show(data.HasRows.ToString());
        int i = data.FieldCount;
        List<string> SingleRow = new List<string>();
       while (data.Read())
        {
            for (int c = 0; c < i; c++)
            {
                SingleRow.Add(data[c].ToString());
            }
        }
        conn.Close();
        return SingleRow.ToArray();
    }