无法弄清楚为什么错误…对象实例没有设置为对象的实例
本文关键字:实例 对象 设置 为什么 错误 弄清楚 | 更新日期: 2023-09-27 17:50:54
对象引用未设置为对象的实例。我仍然有同样的问题…学生S被传进去,学生S被传进去。Scores包含字符串"80 90 100"
public Student GetUpdatedScores(Student s)
{
txtName.Text = s.Name;
lstScores.Items.Clear();
string[] listOfScores = s.Scores.Split(' '); //receiving error on this line.
for (int i = 0; i < (listOfScores.Length - 1); i++)
{
lstScores.Items.Add(listOfScores[i]);
}
this.ShowDialog();
return student;
}
显然足够的s.Scores
属性返回空值。当你把它影响到scoreS
字符串变量,然后试图分割它,你得到你的异常。
这类问题很容易通过调试会话解决。另外,如果你想确保一个值不能为空,而你不知道,而你正在调试,使用Debug.Assert
调用。例如:
Debug.Assert(scoreS != null);
这样您就知道这些调用不会在release
编译配置上编译。
作为一个额外的建议,如果你不介意我说,你不应该有只根据情况不同的变量。事实上,我认为你应该放弃namE
和scoreS
,因为它们在这里完全没用。而是使用实例属性。这将使代码更容易阅读,并在此过程中帮助您在出现此类问题时自己找出问题。
更新:
我是这样写的(有一些注释进一步解释):
// renamed the function to reflect what it really should do (and does)
public DialogResult ShowUpdatedScores(Student student)
{
// since your method is public this is rather good practice
if (student == null) throw new ArgumentNullException("student");
// with this, scores cannot be null while you debug without you knowing
Debug.Assert(student.Scores != null);
// who needs loops when there's AddRange method? :)
lstScores.Items.Clear();
lstScores.AddRange(student.Scores.Split(' '));
txtName.Text = student.Name;
// it's pointless to return the same student pointer that was passed as a parameter, returning DialogResult makes more sense
return this.ShowDialog();
}
当然,这是对你的代码做了一些假设,但是你明白了。