如何在编译期间将元素添加到LinkedList中而不更改它们

时间:2018-04-06 05:18:10

标签: c# visual-studio

我正在Visual Studio上编写C#代码。我创建了一个LinkedList<“T”> (称为'data')和T类型的临时变量(我们称之为'temp')。 temp的变量属性总是在编译期间发生变化,在某些联结点,我将它添加到列表中,如下所示。
data.addLast(temp);我原本希望data有一个不同值的列表,但它只捕获temp的最终值的多个副本。我不打算将变量data更改为数组。如何让列表以我期望的方式生成值?

编辑:好吧,我提前道歉,听起来有点过于抽象,但是这里有  `

public class Obj { 
    public String name; 
} 

这是我的主要课程:

   LinkedList<Obj> data = new LinkedList<Module>(); 
    Obj temp = new Obj(); 
    temp.name = "ABC"; 
    data.AddLast(temp); 
    temp.name = "DEF"; 
    data.AddLast(temp); 

`

当我为name中的每个元素打印data属性时,两者都产生“DEF”。我无法理解为什么。

1 个答案:

答案 0 :(得分:1)

如果您不想影响原始对象,则必须复制对象并进行修改。类对象是引用类型,因此, - MyClass temp = originalObject; - temp和originalObject实际上指向相同的内存地址。因此,改变temp或originalObject属性无关紧要。

我根据你的情况编写一个小例子,我希望它有所帮助。

class Program
{
   public class Obj
   {
       public String name;

       public Obj Clone()
       {
           return this.MemberwiseClone() as Obj;
       }
   }
   static void Main(string[] args)
   {
       LinkedList<Obj> data = new LinkedList<Obj>();
       Obj temp = new Obj();
       temp.name = "ABC";
       data.AddLast(temp);
       Obj tempCopy = temp.Clone();
       tempCopy.name = "DEF";
       data.AddLast(tempCopy);

       foreach (Obj myClass in data)
       {
           Console.WriteLine(myClass.name);
       }

       Console.ReadKey();
   }
}