对象引用未设置为对象的实例。我仍然有同样的问题......学生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;
}
答案 0 :(得分:2)
显然,s.Scores
属性返回空值。当你将它影响到scoreS
字符串变量然后尝试拆分它时,你会得到你的例外。
使用调试会话很容易解决这种问题。另外,如果您想在调试时确定某个值不能为null,请使用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();
}
当然,这是对你的代码做出一些假设,但你明白了。