2016-09-16 63 views
0

我有一个VB.Net结构,其中包含一堆关于对象的数据。对象被添加到这个结构中,并且往往有一个有限的生命,所以随着时间的推移,我的结构最终会包含已经过期的对象。VB.Net:从结构中删除项目

在他们的一生中,他们的一些属性发生了变化,所以我有一本字典,以便我可以轻松地找到适当的对象,以便我需要更新它。

但是,当一个对象到期时,我想从结构中删除它。我可以从字典中删除它,但无法弄清楚如何从结构中删除它。

这里是我的结构:

Public Class Form1 

    Private Sub Form1_Load(sender As System.Object, e As System.EventArgs) Handles MyBase.Load 
     Main() 
    End Sub 

    Public Structure ObjectList 
     Public hash As String 
     Public xPosition As String 
     Public yPosition As String 
     Public zPosition As String 
     Public speed As String 

     Public Sub New(ByVal _hash As String, ByVal _xposition As String, ByVal _yposition As String, ByVal _zposition As String, ByVal _speed As String) 
      hash = _hash 
      xPosition = _xposition 
      yPosition = _yposition 
      zPosition = _zposition 
      speed = _speed 
     End Sub 
    End Structure 

    Sub Main() 
     Dim Tracking As ObjectList 

     Dim dict_Tracking As New Dictionary(Of String, ObjectList) 

     ' Define a new object 
     Tracking.hash = "4D010AEF" 
     Tracking.xPosition = "3.5" 
     Tracking.yPosition = "7.2" 
     Tracking.zPosition = "8.1" 
     Tracking.speed = "16.2" 

     ' Add hash to dictionary so that we can find it easily without searching entire dictionary 
     dict_Tracking.Add(Tracking.hash, Tracking) 
    End Sub 
End Class 

有一种简单的方法来消除从结构的对象?我宁愿避免创建一个空副本,然后复制活动的副本,然后摧毁旧副本,如果可以的话。

+0

您的结构实际上不是一个列表或集合。这只是关于单个对象的信息。所以,除非你没有发布一些代码,否则你需要做的就是用'dict_tracking.Remove(Tracking.hash)'从字典中移除对象' – FloatingKiwi

+0

嗯,我已经按照你的建议使用Remove方法,但是我的程序需要的内存在新对象进入时不断增长,所以它看起来并没有真正的去除它们,除非有其他事情正在发生,我错过了。是否有任何简单的方法来检查结构的内容,以便我可以看到其中的内容来确认两种方式? –

+0

结构与类非常相似。他们不是集合。所以你的只包含5个字符串。使用调试器并查看dict_tracking集合中的内容。你的内存泄漏在应用程序的其他地方。尝试使用jetbrains dotMemory试用评估或发布剩余的代码。 – FloatingKiwi

回答

0

你不需要。

您的结构基本上只是一个包含一些关于您的对象的数据的容器。当你的对象从字典中被移除时,这个容器就会被移除。所以不需要手动从中删除数据。

对于强制性汽车比喻: 当您的汽车在其中一个巨大的印刷机中被销毁时,您不需要清空汽车的烟灰缸。