2016-11-27 201 views
-2

所以即时制作一个程序,我有一个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; 
    } 

我认为这样做是因为头开始为空,因为列表开始空,但我只是不知道。任何帮助,将不胜感激。如果您需要查看其他代码行,请不要乐意提供。

+4

没有回答,当你说你觉得'head'是空你的问题吗? – NtFreX

+0

@ Dr.Fre你会想,但没有。如果'head'为'null',则'count' *应该为零,在这种情况下'temp'('head')永远不会被访问。 – hvd

+1

有一个非常强大的调试工具,称为*鼠标*。将鼠标悬停在东西上,它会告诉什么是空 – Plutonix

回答

0

看起来你的值为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."); 
相关问题