【发布时间】:2017-03-20 03:35:49
【问题描述】:
我正在使用的对象有两个值,一个对象编号和一个名称字符串; 该对象有一个构造函数,该构造函数在创建新对象时自动递增值,因此每个对象都有一个唯一编号。
public class MyObject
{
private static int _objectnumber;
private string _name;
public MyObject()
{
++_objectNumber;
}
}
我创建一个新对象并将其分配给一个变量。
curObject = new MyObject();
从用户那里得到名字后,我把它插入到一个链表中。
if(myLinkedList == null)
{
myLinkedList = new LinkedList<MyObject>();
myLinkedList.AddFirst(curObject);
}
else
{
// code here to check to make sure the objectnumber is unique
myLinkedList.AddLast(curObject);
}
curObject = null; //I'm done with this
当我创建第二个新对象时会出现问题。当我打电话时...
curObject = new MyObject();
...第二次。构造函数应该增加对象编号,但它也会增加链表第一个节点中的对象编号。
就好像 curObject 仍然指向列表中的第一个节点(这就是为什么我将它放入列表后将其设置为 null。
最初,链表中的 name 字段也会发生变化,但通过将 curObject 设置为 null 来解决这个问题。
显然,当我将 curObject 插入链表时,链表节点只是指向存储 curObject 的内存。但是,当我创建一个新的 curObject 时,它似乎只是将新对象设置为相同的内存空间 - 因此,它也指向链表的第一个节点。
【问题讨论】:
-
我看到只有一个
_objectnumber声明。每个实例没有一个。它是静态的,所以整个过程只有一个。 -
链接列表似乎完全是这个问题的红鲱鱼。如果您只有两个包含两个实例的变量,您将看到完全相同的行为。如果你也在c 中实现了,你会看到几乎相同的问题。
-
是的,链接列表完全是一条红鲱鱼。我更改为 Lists 并得到相同的行为。问题是我将变量声明为静态变量。在设计的同时进行编码,并在早期实施中绊倒,这与最初的想法并不完全一致。
标签: c# .net list linked-list