C#;无法通过引用将变量传递到通用链表中
C#; having trouble passing a variable by reference into a generic linked list
我有一个项目,我需要修改提供的代码以使用通用链表做各种事情。我的问题是我无法将变量值设为列表中的节点。我不断收到 NullReferenceExceptions,不管我似乎没有空值这一事实。我会 post 一些代码以及它告诉我问题出现在哪几行。
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;
}
}
}
}
如果有帮助,我可以从项目中提供更多代码。
谦虚建议你不明白ref是做什么的。它肯定给人一种误导API。你有 5 行说
u.Insert(参考变量);
这种使用 'ref' 的 API 设计会让调用者相信这些都是在列表中插入相同的引用,即对名为 var 的变量的引用。在两者之间更改 var 的值是无关紧要的。
空引用异常来自
start.value = 项目;
应该很明显,因为该行仅在 'start' 为空时才执行。以防万一它不明显:如果 "start" 为 null,则不能在其上设置属性或调用方法(这就是空引用异常)。
编辑添加:
此外,你将不得不给我们更多的线索,而不仅仅是说...
开始=空; //从这一行获取异常。
有什么例外?
我有一个项目,我需要修改提供的代码以使用通用链表做各种事情。我的问题是我无法将变量值设为列表中的节点。我不断收到 NullReferenceExceptions,不管我似乎没有空值这一事实。我会 post 一些代码以及它告诉我问题出现在哪几行。
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;
}
}
}
}
如果有帮助,我可以从项目中提供更多代码。
谦虚建议你不明白ref是做什么的。它肯定给人一种误导API。你有 5 行说
u.Insert(参考变量);
这种使用 'ref' 的 API 设计会让调用者相信这些都是在列表中插入相同的引用,即对名为 var 的变量的引用。在两者之间更改 var 的值是无关紧要的。
空引用异常来自
start.value = 项目;
应该很明显,因为该行仅在 'start' 为空时才执行。以防万一它不明显:如果 "start" 为 null,则不能在其上设置属性或调用方法(这就是空引用异常)。
编辑添加: 此外,你将不得不给我们更多的线索,而不仅仅是说...
开始=空; //从这一行获取异常。
有什么例外?