C# 无法找出错误…对象实例未设置为对象实例的原因

C# 无法找出错误…对象实例未设置为对象实例的原因,c#,.net,null,nullreferenceexception,C#,.net,Null,Nullreferenceexception,对象引用未设置为对象的实例。我仍然有相同的问题…学生S通过,并且(学生)S分数包含一个字符串“8090100” 公共学生GetUpdatedScores(学生) { txtName.Text=s.Name; lstScores.Items.Clear(); string[]listOfScores=s.Scores.Split(“”);//此行接收错误。 对于(int i=0;i

对象引用未设置为对象的实例。我仍然有相同的问题…学生S通过,并且(学生)S分数包含一个字符串“8090100”

公共学生GetUpdatedScores(学生)
{
txtName.Text=s.Name;
lstScores.Items.Clear();
string[]listOfScores=s.Scores.Split(“”);//此行接收错误。
对于(int i=0;i<(listOfScores.Length-1);i++)
{
增加(核心清单[i]);
}
this.ShowDialog();
留学生;
}

显然
s.Scores
属性返回空值。当您将其影响为
分数
字符串变量,然后尝试拆分它时,您会得到异常

这种问题很容易通过调试会话解决。另外,如果您想确保在调试时在不知道的情况下值不能为null,请使用调用。例如:

Debug.Assert(scoreS != null);
只是让您知道这些调用不会在
release
compilation-config上编译

作为一个额外的建议,如果你不介意我说,你不应该有只因情况不同的变量。事实上,我认为你应该放弃
namE
score
,因为它们在这里完全没有用处。改为使用实例属性。这将使代码更易于阅读,并在过程中帮助您在出现类似问题时自己解决这些问题

更新:

以下是我的写作方式(一些评论进一步解释):


当然,这是对你的代码做了一些假设,但你明白了。

为什么在同一种方法中会有多个变量,而这些变量只是根据具体情况而变化?在我看来,这似乎只是为了让代码难以阅读。大概
s.Scores
为空。。。我们能说的就不多了。要得到这个错误,
scoreS
必须为null,所以你传入的
s.scoreS
也必须为null。(作为一个新手)在阅读它之后,唯一的额外变量是namE…将删除它。你也有分数和scoreS如果一个方法在
null
变量上操作,你会得到这个错误,所以我假设
分数
为空。检查
s.Scores
是什么,并检查它是否为
null
。另外,我强烈推荐更好的名字。对于阅读我的人来说,
分数
分数
不仅令人困惑,而且毫无意义。我非常感谢你的建议,因为我对C#世界非常陌生。@JerryG欢迎你。我们都去过那里因为你似乎对StackOverflow也不熟悉,这里有另一个建议:无论何时你提出问题并得到一个有用的答案,把它标记为答案并/或投赞成票。这将使您的帖子标记为已回答,并为帮助您的人打分。;)
Debug.Assert(scoreS != null);
// 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();
}