0

我有一个我创建并保存在集合中的对象:

public class Level
{
    private string id;

    private List<LevelTypes> usableLevelTypes;  // LevelTypes is an enum
    private List<BlockTypes> levelMapping;      // BlockTypes is also an enum

    public Level(string id, List<LevelTypes> levelTypes, List<BlockTypes> incomingBlocks)
    {
        this.id = id;
        this.usableLevelTypes = levelTypes

        levelMapping = incomingBlocks;
    }

通过这个,我可以看到每个项目都被正确设置。然后将该对象放置在 HashSet 中。

然后另一个类遍历 HashSet 调用每个项目的重载.ToString()方法。

在这一点上,我的观察列表中有这个类中的所有相关变量。被调用对象中的所有内容都已正确设置。“id”、“levelMapping”和我没有列出List<T>的所有其他变量,包括 other 和 int,都包含它们的正确值,但报告为空的“usableLevelTypes”除外。

public override string ToString()
{
    var s = new StringBuilder();

    s.Append("ID: " + id);
    s.Append(" Level Types: " + usableLevelTypes[0].ToString()); // At this point,
    // this list should have at minimum one value in it.  However, it is empty and
    // will throw an exception stating as much.

    return s.ToString();
}

任何时候都不会.Clear()在 usableLevelTypes 列表上调用它,它是只读的。当同一对象中的其他列表不存在时,如何重置它?

4

1 回答 1

1

您没有创建传递给Level构造函数的列表的副本usableLevelTypes。因此,无论外部列表发生什么,都将发生在内部列表中Level。没有看到调用代码,我无法具体告诉您问题所在。

于 2012-11-05T03:34:21.607 回答