0

据我阅读列表和类,如果您有某个类的实例列表并将 .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 的当前值,而是“未设置”。我究竟做错了什么?

提前致谢!

4

2 回答 2

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";
            }
        }
    }
}
于 2013-09-08T14:15:21.997 回答
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";
    }
}
于 2013-09-08T14:15:54.807 回答