我正在尝试将对象添加到列表中,以便在程序中的其他位置进行访问。但是,每当我添加一个新对象时,所有先前的对象都会变成最近添加的对象的副本。
我首先尝试使用循环遍历对象,但是发现在添加新对象时,它会覆盖列表中已经存在的所有其他对象。我已经环顾四周,我认为这与引用内存中的对象有关。但是我不知道如何解决引用。
List <ObjectTester> holder = new List<ObjectTester>();
//for(int i =0; i<5; i++)
//{
// ObjectTester objec = new ObjectTester(i.ToString());
// holder.Add(objec);
// foreach (ObjectTester o in holder)
// {
// Console.WriteLine(o.ToString());
// }
//}
holder.Add(new ObjectTester("01"));
Console.WriteLine(holder[0]);
holder.Add(new ObjectTester("02"));
Console.WriteLine(holder[0]);
Console.WriteLine(holder[1]);
public class ObjectTester
{
private static string id;
public ObjectTester(string _id)
{
id = _id;
}
}
在做注释部分并循环显示时,我希望看到
0 1 2 3 4
但是它打印为
4 4 4 4 4
因为所有先前的值都已更改。
为了测试这一点,我在将值添加到列表后打印了这些值,输出为:
0 1 1 2 2 2 3 3 3 3 4 4 4 4 4
向我显示它已被列表中的每个新添加项覆盖。
答案 0 :(得分:2)
那是因为您在ObjectTester类中的ID是静态的。
删除static关键字。查看有关静态关键字static modifier
的MS文档。它没有覆盖对象。覆盖id字段是因为它被标记为静态,因此它不属于ObjectTester类的特定实例。