据我读到列表和类,如果你有一个特定类的实例列表和.Add()它们到列表中,那么应该添加引用。因此,如果您修改原始实例,然后通过列表访问它,则应获得修改后的版本。
这是我的代码的结构:
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的当前值,而是“Not set”。我做错了什么?
提前致谢!
答案 0 :(得分:1)
我无法复制你的问题...
如果我运行以下内容,则表明项目是预期的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";
}
}
}
}
答案 1 :(得分:1)
我重写了你的代码而我没看到你看到了什么。一切正常,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";
}
}