2012-02-22 2 views
0
sampleList.RemoveAll(a=>a.reference.Contains("123")); 

이 코드 줄은하위 문자열 일치를 기반으로 목록 <T>에서 제거하는

sampleList.RemoveAll(a=>!a.reference.Contains("123")); 

반면 목록에서 항목을 제거하지 않습니다 모든 항목을 제거합니다.

나는 현재 다른 목록을 작성하고 for 루프를 거치고 두 번째 목록에 항목을 추가하는 데 의존하고 있지만이 접근법을 정말 좋아하지 않는다.

노력하고있는 것을 달성하기위한 더 깨끗한 방법이 있습니까?

+10

'참조'에 문자열 "123"이 포함되어 있습니까? – Oded

+4

나중에 코드를 컴파일해서는 안되며, 엄밀한 코드 조각을 제공 했습니까? – sll

+0

저를위한 일 : http://rextester.com/TPAQW81340 – Jamiec

답변

4

두 번째 예제에서는 "모든 항목을 제거하고"첫 번째 항목은 아무 것도 제거하지 않기 때문에 목록의 항목 중 reference 속성 중 "123"이라는 문자열이 하나도 없다고 결론 내릴 수 있습니다.

는 Elementry은 나의 친애하는 왓슨)

+0

은 분명히 참조 대신 다른 것을 제거하고있었습니다. | – Shekhar

0

같아요 것이다 당신의 sampleList는 "123"를 포함하는 요소가 없습니다. 이는 첫 번째 시도가 아무 것도 제거하지 못하며 두 번째 시도 (첫 번째 시도의 반대)가 모든 것을 제거한다는 사실에 의해 입증됩니다. 여기

내가 당신이 달성하려고 생각하는지 테스트하기 위해 쓴 샘플 콘솔 응용 프로그램이며, 그것은 작동 : 컬렉션의 항목의 값을 확인하여

static void Main(string[] args) 
{ 
    List<string> sampleList = new List<string>(new string[] 
    { 
     "Some String", "Some Other String", "Hello World", "123456789", "987654123" 
    }); 

    Console.WriteLine("Items:"); 
    foreach (string item in sampleList) 
    { 
     Console.WriteLine(item); 
    } 

    Console.WriteLine("\nRemoving items containing \"123\"..."); 

    int itemsRemoved = sampleList.RemoveAll(str => str.Contains("123")); 
    Console.WriteLine("Removed {0} items.", itemsRemoved); 

    Console.WriteLine("\nItems:"); 
    foreach (string item in sampleList) 
    { 
     Console.WriteLine(item); 
    } 

    Console.ReadKey(); 
} 

시작. 값에 필요한 값이 포함되어 있는지 확인한 다음 올바른 값의 요소가 제거되었는지 확인하려면 반환 값 RemoveAll(...)을 확인합니다.

관련 문제