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"、および他の'やintを含む、リストにない他のすべての変数にはList<T>、空であると報告される "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()使用可能なLevelTypesリストではどの時点でも呼び出されず、読み取り専用です。同じオブジェクト内の他のリストがリセットされていない場合、どのようにリセットできますか?

4

1 に答える 1

1

Levelのコンストラクターに渡すリストのコピーを作成していませんusableLevelTypes。したがって、その外側のリストに起こっていることはすべて、内側のリストにも起こりLevelます。呼び出し元のコードを見ないと、問題が何であるかを具体的に伝えることはできません。

于 2012-11-05T03:34:21.607 に答える