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();
第一种选择会更好,因为您只分配一个对象。
诚然,我倾向于不理会性能,而使用第二种选择,因为它花费了更少的脑力进行编码。