1

特定の値を含むオブジェクトを削除するメソッドを呼び出しています。次のようになります。

static public void RemovePiece(string BoardId)
{
    LumberPiece board = LocateBoard(BoardId);
    board = null;
}

LumberPiece は次のようなクラスです。

private class LumberPiece
{
    public string boardID;
    ...
}

LocateBoard は、正しく識別された LumberPiece オブジェクトを返す関数です。

static private LumberPiece LocateBoard(string BoardId)
{
    if (SawyerArea.lumber.boardID == BoardId)
        return SawyerArea.lumber;
    else if (SpliceArea1.lumber.boardID == BoardId)
        return SpliceArea1.lumber;
    else if (SpliceArea2.lumber.boardID == BoardId)
        return SpliceArea2.lumber;
    else
        throw new Exception("Your LumberID was not found in any activity area. Has it already been removed? or are you handling the integer-String Conversion Correctly");
}

Area 変数は、このクラスのインスタンスです。

private class ActivityArea
{
    public Sensor sensor;
    public ClampSet clampSet;
    public Servo servo;
    public LumberPiece lumber;

    public bool IsCurrentlyFilled()
    {
        if (lumber != null)
            return true;
        else
            return false;
    }

    public ActivityArea(Sensor s, ClampSet cs, Servo srv)
    {
        sensor = s;
        clampSet = cs;
        servo = srv;
    }

正しく識別された LumberPiece オブジェクトを削除するにはどうすればよいですか?

4

2 に答える 2

8

.NET などのガベージ コレクション フレームワークでは、オブジェクトを「削除」しません。あなたはそれを気にするのをやめるだけです。それへの参照が(どのルートでも)なくなると、ガベージコレクターがやがてそれを処理します。

これには、リストなどからの参照の削除が含まれる場合があります。これは通常、次のように簡単です。

list.Remove(theObject);

ただし、ボードを保存した場所がわからないため、ボードへの参照を削除する方法はわかりません。

実際、ここで行う必要がある作業は、非 GC プラットフォームと同じです。後で削除されたポインターにアクセスしたときに恐ろしいエラーが発生しないように、これらのリストからポインターを削除する必要があります

于 2013-07-15T20:23:57.643 に答える