VB.net:从常规列表中删除项不起作用
我正在使用VB.net并尝试从列表中删除一个对象项,如下所示:VB.net:从常规列表中删除项不起作用,vb.net,.net-3.5,Vb.net,.net 3.5,我正在使用VB.net并尝试从列表中删除一个对象项,如下所示: Dim evidenceContentItems As List(Of ContentData) = contentApi.GetList(contentCriteria) For Each item As ContentData In evidenceContentItems.ToList() Dim contentMetaList() As Ektron.Cms.CustomAttribute = metaApi.G
Dim evidenceContentItems As List(Of ContentData) = contentApi.GetList(contentCriteria)
For Each item As ContentData In evidenceContentItems.ToList()
Dim contentMetaList() As Ektron.Cms.CustomAttribute = metaApi.GetContentMetadataList(item.Id).AttributeList
For Each metaItem As CustomAttribute In contentMetaList.ToList()
If metaItem.Value <> "-1" Then
evidenceContentItems.Remove(item)
End If
Next
Next
我再次从.Remove(item)获得了一个真实的返回,但计数仍然没有下降。因此我无法成功地从列表中删除一个项目。最后,我创建了一个新列表来添加项目。我创建了一个名为itemsToShow的新列表:
Dim itemsToShow As New List(Of ContentData)
然后,当我循环遍历证据内容项时,我添加了一些本来不会删除的项:
itemsToShow.Add(item)
我完全明白了删除副本的意思——但在我上面编辑的问题中,我试图从原件中删除,但没有成功。
remove
不起作用,因为项
在内存中引用的对象与您试图从列表中删除的对象不相同
一个选项是覆盖ContentData
类中的Equals
和GetHashCode
,这样即使两个对象不相同,也可以将它们视为“相等”
您还可以使用RemoveAll
方法,该方法不需要更改ContentData
类:
evidenceContentItems.RemoveAll(Function(x) x.Id = itemToRemove.Id)
这是一个老帖子。但我只是想分享对我有用的东西。用ToArray代替ToList()对我有用
For Each item As ContentData In evidenceContentItems.ToArray()
evidenceContentItems.Remove(item)
Next
“项”是一个对象。您从副本中获取项目,但不等于原始项目。请详细介绍
ContentData
。它是值类型还是引用类型?您是否覆盖了Equals
和GetHashCode
?ContentData是来自内容管理系统的对象。我没有跳过Equals或GetHashCode。
For Each item As ContentData In evidenceContentItems.ToArray()
evidenceContentItems.Remove(item)
Next