C# 如何修复向列表中添加对象时的覆盖

C# 如何修复向列表中添加对象时的覆盖,c#,list,C#,List,我试图将对象添加到列表中,以便在程序中的其他位置访问。但是,每当我添加新对象时,所有以前的对象都会变成最近添加的对象的副本 我首先尝试使用循环遍历对象,但发现在添加新对象时,它会重写列表中已经存在的所有其他对象。我环顾了一下四周,我认为这与引用内存中的对象有关。但是,我不知道如何修复引用 List <ObjectTester> holder = new List<ObjectTester>(); //for(int i =0; i<5; i++)

我试图将对象添加到列表中,以便在程序中的其他位置访问。但是,每当我添加新对象时,所有以前的对象都会变成最近添加的对象的副本

我首先尝试使用循环遍历对象,但发现在添加新对象时,它会重写列表中已经存在的所有其他对象。我环顾了一下四周,我认为这与引用内存中的对象有关。但是,我不知道如何修复引用

    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]);
当执行注释部分并使用循环显示时,我希望看到
01234
然而,它打印出来作为
4
因为之前的所有值都已更改。 为了测试这一点,我在将值添加到列表后打印了这些值,输出为:
01122343444

向我显示列表中的每个新添加项都会覆盖它。

这是因为ObjectTester类中的id是静态的

删除static关键字。查看有关静态关键字的MS文档:


它没有覆盖对象。它重写id字段,因为它被标记为静态,所以它不属于ObjectTester类的特定实例

这很有道理!是的,它正在做我期望的事情。非常感谢。没问题,伙计:)
public class ObjectTester
{
    private static string id;

    public ObjectTester(string _id)
    {
        id = _id;
    }
}