-2

foreachループに問題があり、List<T>

foreach (DefenceTerminal defence in DefenceManager.defenceCollection)
{
    defence.ReadNetworkPacket(packetReader);
    //this is a very simple function that just sets defence.damage = to whatever
    //it properly sends the value and sets it
    //defence.damage is a int
}

ループを離れると、値が...消えます。(変更に失敗します)

ループが終了すると、すべての値は変更されません

リストは同様の方法で更新時にアクセスされます。

代わりにループも使用したので、他の何よりも問題forだと思います。List<T>

ただし、リストを使用し続けることをお勧めします。提案?

そして、これは非常に単純な機能が必要な人のための非常に単純な機能です

    public void ReadNetworkPacket(PacketReader packetReader)
    {
        damage = packetReader.ReadInt32();
    }

IT は機能しますが、リストとループは機能しません。

繰り返しますが、ループ内ではすべてが正常に機能します。何度もチェックしましたが、うまくいきません...独自の小さな個人的なリストを作成して混乱させ、完了後にドロップするように、これは役に立たない場合に役立ちますリストを更新しようとしています。リストと関係があるのは奇妙な特異性だと思います。

その他のがらくた:

public static List<DefenceTerminal> defenceCollection = new List<DefenceTerminal>();

        for (int i = 0; i < factionCount; i++)
        {
            DefenceTerminal d = new DefenceTerminal();
            for (int j = 0; j < defenceLimit; j++)
            {
                defenceCollection.Add(d);
            }
        }
4

2 に答える 2

1

より多くのコードを投稿してください。ただし、コレクションをローカルに作成しすぎているように感じます。クラス全体のプライベート メンバー変数のように、クラス スコープの上位に移動してください。

于 2012-06-09T03:27:28.507 に答える
0

DefenceTerminalのように聞こえるstructので、valueタイプです。これは、 を通過するforeach loopときに、コピーを変更しているだけであることを意味します。代わりにクラシックfor loopを使用して、実際のリストにインデックスを付けてみてください。

于 2012-06-09T03:19:03.863 に答える