[英]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.