私は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.GetContentMetadataList(item.Id).AttributeList
For Each metaItem As CustomAttribute In contentMetaList.ToList()
If metaItem.Value <> "-1" Then
evidenceContentItems.Remove(item)
End If
Next
Next
「evidenceContentItems.Remove(contentItem)」コマンドに QuickWatch を配置すると、True が返されますが、リスト内のアイテムの数は減らず、アイテムは実際には削除されません。
他に考えられる唯一のことは、2 番目のリストを作成し、代わりに有効な項目を追加することですが、.remove が機能しない (それでも True を返す) 理由を理解したいと思います。
編集:
したがって、 .ToList() を呼び出すことでコピーを作成しているように見えるため、.Remove() を実行するとコピーから削除されます。.ToList() を追加したのは、反復処理中にリストから項目を削除できないためです。
また試してみました:
For Each item As ContentData In itemsToRemove
If evidenceContentItems.Contains(item) Then
evidenceContentItems.Remove(item)
End If
Next
繰り返しますが、.Remove(item) から True が返されますが、それでもカウントは下がりません。