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',但它不是类型或命名空间。我该怎么办?
它们都是字符串数组,并且在第一次运行时发生错误,因此我认为它与超出边界无关。
答案 0 :(得分:4)
您需要在id
循环之前初始化for
数组:
id = new string[x/3];
答案 1 :(得分:2)
这行代码:
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();
第一个选项会更好,因为您只分配一个对象。
不可否认,我倾向于忽视性能并使用第二种选择,因为代码需要较少的智力。