为什么创建新对象时C#链接列表中的值会发生变化?

mma*_*uso 1 .net c# linked-list list

我正在使用的对象有两个值,一个对象编号和一个名称字符串; 该对象具有一个构造函数,只要创建一个新对象,该构造函数就会自动递增该值,因此每个对象都有一个唯一的编号.

public class MyObject
{
    private static int _objectnumber;
    private string _name; 

     public MyObject()
     {
         ++_objectNumber;
     }
}
Run Code Online (Sandbox Code Playgroud)

我创建一个新对象并将其分配给变量.

curObject = new MyObject();
Run Code Online (Sandbox Code Playgroud)

从用户获取名称后,我将其插入链接列表.

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
Run Code Online (Sandbox Code Playgroud)

当我创建第二个新对象时会发生问题.当我打电话给...

 curObject = new MyObject();
Run Code Online (Sandbox Code Playgroud)

...第二次.构造函数按原样递增对象编号,但它也会增加链接列表的第一个节点中的对象编号.

好像curObject仍然指向列表中的第一个节点(这就是为什么我将它放在列表中后将其设置为null.

最初,链表中的名称字段也会更改,但通过将curObject设置为null可以解决此问题.

显然,当我将curObject插入到链表中时,链表节点只指向存储curObject的内存.但是,当我创建一个新的curObject时,它似乎只是将新对象设置为相同的内存空间 - 因此,它也指向链接列表的第一个节点.

Mit*_*eat 10

正如@Damien评论的那样,您的问题与链表无关.

您已将_objectnumber该类定义为静态,即该类的所有实例只有一个副本.

相反,创建一个私有成员并从静态变量中分配:

public class MyObject
{
    private static int Objectnumber = 0;

    private int _objectnumber;
    private string _name; 

    public MyObject()
    {
        _objectNumber = ++Objectnumber;
    }
}
Run Code Online (Sandbox Code Playgroud)