我正在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”。我无法理解为什么。
答案 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();
}
}