2016-08-08 4 views
0

에서 항목을 제거 나는 여기 List<Fill> items사용자 지정 목록

Fill 클래스가?

예 : 내가 그에게하는 방법을 알고하지 않았다 게시물의 제목

void OnDelete(object sender, EventArgs e, string arretName, string ligneSensName) 
{ 
    var aFill = new Fill 
    { 
     arret = arretName, 
     ligneSens = ligneSensName 
    }; 

    items.Remove(aFill); //<--- this doesn't work 
} 

죄송합니다.

답변

6

objectEqualsGetHashCode 메서드를 재정의해야합니다. 참조 유형 (클래스)에 Remove을 호출하면 Equals 메소드에 의해 하나를 찾습니다. GetHashCode() 최우선 검색에 가장 좋은 방법은 온라인 무엇인지에 대한

public class Fill 
{ 
    public string arret { get; set; } 
    public string ligneSens { get; set; } 

    public override bool Equals(object obj) 
    { 
     var other = obj as Fill; 
     if(other == null) 
      return false; 

     return other.arret == arret && other.ligneSens == ligneSens; 
    } 

    public override int GetHashCode() 
    { 
     return arret.GetHashCode()^
       ligneSens.GetHashcode(); 
    } 
} 

, 그것에 대해 많은 질문이

또 다른 방법이있다, 특히 각 항목에 대해 평가하는 술어를 전달하여 remove에 무슨 말을하는 것입니다

items.RemoveAll(item => item.arret = arretName && 
         item.ligneSens == ligneSensName); 
+0

무엇 나는 Imals와 GetHashCode를 안다. 더 많은 코드를 개발 했습니까? 'RemoveAll'는 LINQ와 아무 상관이있다, 그것은'목록 '의 인스턴스 방법입니다 : –

+0

네, 또 다른 옵션은''Fill'' –

2

사용 목록 API RemoveAll

: 컬렉션 이 새로운 기준이 동일한 참조하지 않기 때문에

items.RemoveAll(x => x.arret.Equals("value") && x.ligneSensName.Equals("ligneValue"));

+5

그냥 정확히 말하면 평등을 정의하는 것입니다. LINQ는 기능적 접근 방식을 사용하며 기존 컬렉션 또는 해당 요소를 변경하지 않습니다. RenéVogt 덕분 @ –

+0

그것을 지적, 나는 @Sherlock 정정 가리키는 위해 도니는 다르게 LINQ – Sherlock

4

당신은 현재 당신이 items이 정보를 가지고 있지 않는 대해 새로 만든 객체를 전달하는, 그것을위한 RemoveAll()을 사용해야합니다 :

void OnDelete(object sender, EventArgs e, string arretName, string ligneSensName) 
{ 
    items.RemoveAll(item => item.arret == arretName && item.ligneSens == ligneSensName); 
} 
+0

편집으로 장기 API를 사용하여 람 바어 발현에 – Sherlock

+0

감사 할당을 사용 해요 –

관련 문제