C#;无法通过引用将变量传递到通用链表

时间:2018-02-24 04:51:20

标签: c# generics nullreferenceexception

我有一个项目,我需要修改提供的代码以使用通用链接列表执行各种操作。我的问题是我无法将变量值作为列表中的节点。我不断得到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;
            }
        }
    }  
}      

如果有帮助,我可以从项目中提供更多代码。

1 个答案:

答案 0 :(得分:0)

我谦卑地建议你不要理解裁判在做什么。它肯定会给出一个误导性的API。你有5行说

u.Insert(ref var);

此API设计使用&#39; ref&#39;会使调用者相信这些都是在列表中插入相同的引用,即对变量的引用。更改var之间的值是无关紧要的。

来自

的空引用异常

start.value = item;

应该是显而易见的,因为该行仅在“开始”时执行。一片空白。万一它不明显:如果&#34;开始&#34;为null,那么你就不能在其上设置属性或调用方法(这是一个空引用异常)。

编辑添加: 而且,你不得不给我们更多的线索,而不仅仅是说......

start = null; //从这一行获得一个例外。

什么是例外?