c# - 将对象添加到列表时如何修复覆盖
问题描述
我正在尝试将对象添加到列表中,以便在程序中的其他位置访问。但是,每当我添加一个新对象时,所有以前的对象都会变成最近添加的对象的副本。
我首先尝试使用循环遍历对象,但发现添加新对象时会覆盖列表中已经存在的所有其他对象。我做了一些环顾四周,我认为这与引用内存中的对象有关。但是我不知道如何修复引用。
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
向我展示它被列表中的每一个新添加所覆盖。
解决方案
那是因为您在 ObjectTester 类中的 id 是静态的。
删除 static 关键字。查看有关静态关键字的 MS 文档:静态修饰符
它没有覆盖对象。它覆盖了 id 字段,因为它被标记为静态,它不属于 ObjectTester 类的特定实例。
推荐阅读
- c++ - 速度:C++ 中的 typedef 与 #define
- passenger - EasyApache 4/CentOS/cPanel 上的乘客不会启动 Rails 应用程序
- php - 如何在php中查找带有条件的xpath表达式的计数?
- api - 如何在 OSticket API 中禁用轮换 IP 地址
- heroku - FileNotFoundError:在 Heroku 上运行 pyspark 命令时没有遇到 spark-submit 的此类文件或目录
- c++ - 怎么可能调用了析构函数但在此之前没有构造函数?
- java - 尝试编程
- javascript - 双向链表 - 头部的上一个元素不可访问
- node.js - 需要一个不和谐的机器人来询问用户在 discord.js 中的多个输入
- java - 返回具有任意数量输入参数的函数