如何重置List <t>?</t>

时间:2012-11-05 03:31:38

标签: c#

我有一个我创建并粘贴在一个集合中的对象:

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>和int)包含其正确的值,但“usefulLevelTypes”除外,它被报告为空。

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();
}

在availableLevelTypes List上调用.Clear()并且它是只读的。当同一对象中的其他列表不是时,如何重置?

1 个答案:

答案 0 :(得分:1)

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