为什么我的ToString方法总是返回一个NullReferenceException?
问题描述:
所以即时制作一个程序,我有一个LinkedList类,我必须将其实现到一个Forms应用程序。唯一困难的部分是使ToString方法正常工作,它不会。为什么我的ToString方法总是返回一个NullReferenceException?
public override string ToString()
{
ListNode temp = head;
string modifier = "";
for (int i = 0; i <= count -1; i++)
{
modifier += count + ") " + temp.getValue() + "\r\n";
temp = temp.getNext();
}
return modifier;
}
我认为这样做是因为头开始为空,因为列表开始空,但我只是不知道。任何帮助,将不胜感激。如果您需要查看其他代码行,请不要乐意提供。
答
看起来你的值为count
是错误的 - 它不符合列表中有多少个节点。然而,一个更简单的解决将是使用while循环 - 所以它具有的优势不那么冗长:
public override string ToString()
{
ListNode temp = head;
string modifier = "";
while(temp != null)
{
modifier += count + ") " + temp.getValue() + "\r\n";
temp = temp.getNext();
}
return modifier;
}
我们还可以添加一个“计数验证”以确保count
实际上是正确的检测用途:
public int fullCount{
get{
int total=0;
ListNode temp = head;
while(temp != null)
{
total++;
temp = temp.getNext();
}
return total;
}
}
随着:
Debug.Assert(fullCount == count,"Count is wrong.");
没有回答,当你说你觉得'head'是空你的问题吗? – NtFreX
@ Dr.Fre你会想,但没有。如果'head'为'null',则'count' *应该为零,在这种情况下'temp'('head')永远不会被访问。 – hvd
有一个非常强大的调试工具,称为*鼠标*。将鼠标悬停在东西上,它会告诉什么是空 – Plutonix