2012-08-29 4 views
0
내가 VB.net을 사용하고

작동하지 않는 일반적인 목록에서 항목을 제거하고과 같이 목록에서 객체 항목을 제거하는 것을 시도하고있다 :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) "명령을 실행하면 True를 반환하지만 목록의 항목 수가 줄어들지 않고 항목이 실제로 제거되지 않습니다.

제가 생각할 수있는 유일한 다른 점은 두 번째 목록을 만들고 대신 유효한 항목을 추가하는 것입니다. 그러나 .remove가 작동하지 않는 이유를 이해하고 싶습니다 (아직 True를 반환 함).

편집 :

은 그래서 .ToList()를 호출하여 나는 복사를하고있어 내가 .Remove() 나는 복사본에서 제거하고 때 것으로 보인다. 목록을 반복하는 동안 목록에서 항목을 제거 할 수 없으므로 .ToList()를 추가했습니다.

For Each item As ContentData In itemsToRemove 
     If evidenceContentItems.Contains(item) Then 
      evidenceContentItems.Remove(item) 
     End If 
    Next 

가 다시 나는 .Remove (항목)에서 진정한 수익을 얻을 여전히 수는 내려 가지 않습니다

도 노력했다.

+0

"항목"객체는 다음과 같습니다

는 또한 ContentData 클래스의 변경을 필요로하지 않는 RemoveAll 방법을 사용할 수 있습니다. 당신은 복사하지만 원래 아이템과 동등하지 않은 아이템을 얻습니다. –

+1

'ContentData'에 대해 더 자세히 알려주십시오. 값 유형 또는 참조 유형입니까? 'Equals'와'GetHashCode'를 오버라이드 했습니까? – sloth

+0

ContentData는 콘텐츠 관리 시스템의 개체입니다. 나는 Equals 나 GetHashCode를 overidden하지 않았다. –

답변

0

그래서 목록에서 항목을 성공적으로 제거 할 수 없습니다. 결국에는 항목을 추가하는 새로운 목록을 만들었습니다.

Dim itemsToShow As New List(Of ContentData) 

다음 evidenceContentItems을 통해 I 루프, 나는 내가 그렇지 않으면 제거하지 않은 것 항목 추가 : 나는 itemsToShow라는 새로운 목록을 생성

itemsToShow.Add(item) 

내가 사본을 제거하는 방법에 대한 모든 것을 얻을 수를 - 하지만 위의 편집 된 질문에서 원본에서 제거하려고했지만 아무 소용이 없습니다.

2

Removeitem이 목록에서 제거하려는 메모리와 동일한 개체를 메모리에서 참조하지 않기 때문에 작동하지 않습니다.

ContentData 클래스의 EqualsGetHashCode을 재정의하여 두 개의 객체가 같지 않더라도 두 객체가 "동등"하다고 간주 할 수 있습니다.

evidenceContentItems.RemoveAll(Function(x) x.Id = itemToRemove.Id) 
관련 문제