簡體   English   中英

在C#中刪除返回對象的屬性

[英]remove returned object's property in C#

我正在調用一種方法來刪除包含特定值的對象。 看起來像這樣:

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對象?

在像.NET這樣的垃圾收集框架中,您不會“刪除”對象。 您只需停止關心它 一旦沒有引用(通過任何途徑),垃圾收集器就會在適當的時候進行處理

這可能涉及從列表中刪除引用等,這通常很簡單:

list.Remove(theObject);

但是,由於我們看不到板子的存儲位置 ,因此無法告訴您如何刪除對板子的引用。

實際上,您需要在此處完成的工作與非GC平台沒有什么不同; 仍然需要從這些列表中刪除該指針,以避免以后訪問已刪除的指針時發生可怕的錯誤。

您需要找到包含要刪除的Lumber對象的ActivityArea

因此對於示例,您可以使用此方法代替LocateBoard:

static public ActivityArea LocateAreaByBoard(string BoardId)
        {
            if (SawyerArea.lumber.boardID == BoardId)
                return SawyerArea;
            else if (SpliceArea1.lumber.boardID == BoardId)
                return SpliceArea1;
            else if (SpliceArea2.lumber.boardID == BoardId)
                return SpliceArea2;
            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");
        }

然后您可以將刪除代碼更改為如下所示:

ActivityArea area = LocateAreaByBoard(BoardId);
area.lumber = null;

而且它將為您提供所需的刪除效果

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM