我有一个项目,我需要修改提供的代码以使用通用链接列表执行各种操作。我的问题是我无法将变量值作为列表中的节点。我不断得到NullReferenceExceptions,不管看起来好像我没有空值。我发布了一些代码,以及它在哪些方面告诉我问题出现在哪里。
public static void Main(string[] args)
{
UnorderedLinkedList<int> u = new UnorderedLinkedList<int>();
Console.WriteLine("int");
int var = 5;
u.insert(ref var);
var = 12;
u.print();
u.insert(ref var);
var = 2;
u.print();
u.insert(ref var);
var = 29;
u.print();
u.insert(ref var);
var = 5;
u.print();
u.insert(ref var);
u.print();
var = 5;
}
namespace LinkedListNamespace
{
public abstract class LinkedList<T>
{
protected class Node
{
public T value;
public Node next;
}
protected Node start = new Node();
public LinkedList()
{
start = null; //getting an exception from this line.
}
}
public class UnorderedLinkedList<T> : LinkedList<T>, LinkedListADT<T>
{
public override void insert(ref T item)
{
if (start == null)
{
start.value = item; //getting an exception from this line as well.
}
else
{
Node temp;
for (temp = start; temp.next != null; temp = temp.next)
{
temp.next.value = item;
}
}
}
}
如果有帮助,我可以从项目中提供更多代码。
答案 0 :(得分:0)
我谦卑地建议你不要理解裁判在做什么。它肯定会给出一个误导性的API。你有5行说
u.Insert(ref var);
此API设计使用&#39; ref&#39;会使调用者相信这些都是在列表中插入相同的引用,即对变量的引用。更改var之间的值是无关紧要的。
来自
的空引用异常start.value = item;
应该是显而易见的,因为该行仅在“开始”时执行。一片空白。万一它不明显:如果&#34;开始&#34;为null,那么你就不能在其上设置属性或调用方法(这是一个空引用异常)。
编辑添加: 而且,你不得不给我们更多的线索,而不仅仅是说......
start = null; //从这一行获得一个例外。
什么是例外?