我该如何处理这个NullReferenceException?

时间:2012-01-22 00:52:54

标签: c# arrays

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未处理'错误,并建议我使用'new',但它不是类型或命名空间。我该怎么办?

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

2 个答案:

答案 0 :(得分:4)

您需要在id循环之前初始化for数组:

id = new string[x/3];

答案 1 :(得分:2)

这行代码:

string[] id;

实际上是在创建null引用。

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

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

  1. 预先确定数组的大小,并创建数组长度
  2. 实际上填充一个管理自己大小的容器。
  3. 第一个选项:

    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();
    

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

    不可否认,我倾向于忽视性能并使用第二种选择,因为代码需要较少的智力。