我的代码中遇到了声明的异常。然后我在网上搜索这个异常并尽我所能,创建一个实例,使元素被添加到ObservableCollection中。 NullException可能来自personID [0]?但是对于数组,它始终从0开始。就像8的数组从0到7.我无法弄清楚为什么这个异常持续存在。你能帮帮我吗?非常感谢您的帮助,并提前感谢。
using (StreamReader file = new StreamReader(fileName))
{
if (this.PersonIdDetails == null)
PersonIdDetails= new ObservableCollection<PersonId>();
else
this.PersonIdDetails.Clear();
var lineCount = File.ReadLines(fileName).Count();
PersonId[] personId = new PersonId[lineCount];
int y = 0;
while (file.Peek() >= 0)
{
string line = file.ReadLine();
if (string.IsNullOrEmpty(line)) continue;
//To remove the whitespace of the to-be-splitted-elements
line = line.Replace(" ", "_");
char[] charSeparators = new char[] { '§', '�' };
string[] parts = line.Split(charSeparators, StringSplitOptions.RemoveEmptyEntries);
personId [y].QualName = parts[1]; //the exception is throw here. "Object reference not set to an instance of an object".
personId [y].ID = parts[2];
personId [y].Use.UserUse = true;
GetWriteablePropertyUser(personId [y], Convert.ToInt32(parts[3]));
GetReadablePropertyUser(personId [y], Convert.ToInt32(parts[3]));
PersonIdDetails .Add(personId [y]);
y++;
}
}
从代码中可以看出,我写了“PersonId [] personId = new PersonId [lineCount];”数组中的一个实例来解决异常,但问题仍然存在。如果是因为y = 0,这意味着如果我有一个120的数组,那么我只能填充119个元素?谢谢你的时间。
答案 0 :(得分:2)
问题出在
行PersonId[] personId = new PersonId[lineCount];
PersonId是一个类(引用类型),因此在创建数组时,所有元素都被初始化为null。您需要为每个数组元素创建一个实例。
这样做的一种方法是在抛出异常的行之前插入这一行:
personId [y] = new PersonId();