添加到列表会复制类的实例
本文关键字:实例 复制 列表 添加 | 更新日期: 2023-09-27 18:30:45
据我所知,如果你有一个某个类的实例列表和.将它们添加到列表中,应添加引用。因此,如果您修改原始实例,然后通过列表访问它,您应该获得修改后的版本。
这是我的代码结构:
public class Config()
{
public List<Item> listOfItems = new List<Item>();
public Item item1 = new Item();
public Item item2 = new Item();
...
Config()
{
listOfItems.Add(item1);
listOfItems.Add(item2);
...
}
}
public class Item
{
public string name;
Item()
{
name = "Not Set";
...
}
}
在我的主代码中的某个地方,我会使用 currentConfig,它是 Config 类的一个实例:
currentConfig.item1.name = "A";
currentConfig.item2.name = "B";
for (int i = 0; i < currentConfig.listOfItems.Count; i++)
{
DoSomething(currentConfig.listOfItems[i].name);
}
但这并没有给我 item1.name 和 item2.name 的当前值,而是"未设置"。我做错了什么?
提前感谢!
我无法复制你的问题...
如果我运行以下内容,它表明项目是预期的 A 和 B
using System.Collections.Generic;
using NUnit.Framework;
namespace ClassLibrary1
{
[TestFixture]
public class Stack1
{
[Test]
public void TestConfigItems()
{
var currentConfig = new Config();
currentConfig.item1.name = "A";
currentConfig.item2.name = "B";
for (int i = 0; i < currentConfig.listOfItems.Count; i++)
{
Assert.AreNotEqual("Not Set", currentConfig.listOfItems[i].name);
Assert.AreEqual(i == 0 ? "A" : "B", currentConfig.listOfItems[i].name);
}
}
public class Config
{
public List<Item> listOfItems = new List<Item>();
public Item item1 = new Item();
public Item item2 = new Item();
public Config()
{
listOfItems.Add(item1);
listOfItems.Add(item2);
}
}
public class Item
{
public string name;
public Item()
{
name = "Not Set";
}
}
}
}
我重写了你的代码,我没有看到你看到的内容。一切都很好,name
属性更改正确。这是我所做的:
internal class Program
{
private static void Main(string[] args)
{
var currentConfig = new Config();
currentConfig.item1.name = "A";
currentConfig.item2.name = "B";
for (var i = 0; i < currentConfig.listOfItems.Count; i++)
Console.WriteLine(currentConfig.listOfItems[i].name);
}
}
public class Config
{
public Item item1 = new Item();
public Item item2 = new Item();
public List<Item> listOfItems = new List<Item>();
public Config()
{
this.listOfItems.Add(this.item1);
this.listOfItems.Add(this.item2);
}
}
public class Item
{
public string name;
public Item()
{
this.name = "Not Set";
}
}