public partial class Form1 : Form
{
    string[] id;

private void button_Click(object sender, EventArgs e)
{
    char[] delimiters = { ',', '\r', '\n' };
    string[] content = File.ReadAllText(CSV_File).Split(delimiters);

    int x = content.GetUpperBounds(0)
    int z = 0;
    int i - 0;

    for (i = 0; i <= x / 3; i++)
        {
            z = (i * 3);
            id[i] = content[z]; // this line gives the error
        }

}
}


我想从数组内容中获取每个第3个值,并将其放入数组ID中。这给出了“ NullReferenceException was unhandled”错误,并建议我使用“ new”,但它不是类型或名称空间。我该怎么办?

它们都是字符串数组,并且错误在第一次运行时发生,因此我认为这与超出范围无关。

最佳答案

这行代码:

string[] id;


实际上是在创建null引用。

声明数组时,必须显式创建它,并指定大小。

在您的示例中,您有两种选择


预先确定数组的大小,并创建数组长度
实际上填充一个管理自己大小的容器。


第一种选择:

int x = content.GetUpperBounds(0)
int z = 0;
int i - 0;

id = new string[x/3];
for (i = 0; i <= x / 3; i++)
    {
        z = (i * 3);
        id[i] = content[x];
    }


第二种选择:

int x = content.GetUpperBounds(0)
int z = 0;
int i - 0;

List<string> list = new List<string>();
for (i = 0; i <= x / 3; i++)
    {
        z = (i * 3);
        list.Add(content[z]);
    }

id = list.ToArray();


第一种选择会更好,因为您只分配一个对象。

诚然,我倾向于不理会性能,而使用第二种选择,因为它花费了更少的脑力进行编码。

10-06 13:15