2011-08-20 3 views
0

linq을 사용하여 요소가 컬렉션에 존재하지 않는지 확인하는 다른 방법?

if (!ObjectCollection.Any(o => o.Property == SomeValue)) 
    // ... 

컬렉션이 가 아닌지 확인 특정 요소가 있지만 ! 부정을 놓치거나 잘못 해석하는 경우가 있습니다.

컬렉션에 부정 연산자를 사용하지 않는 특정 요소가 없다는 것을 확인하는 또 다른 방법이 있습니까? 나는 쿼리 식 대신 점 표기법을 사용하는 것을 선호하지만, 아마도 쿼리 식은 뱅크를 놓친 사람에게 더 읽기 쉽습니다.

답변

4

이 표준 LINQ에서 아무것도 없다,하지만 만약 당신이 정말 당신은 항상 당신의 자신의 확장 방법을 쓸 수 있습니다 (I 추천하려는 접근 방식 인) !를 사용하여 좋아하지 않는다 : (

public static bool DoesNotContain<T>(this IEnumerable<T> source, T item) 
{ 
    return !source.Contains(item); 
} 


public static bool None<T>(this IEnumerable<T> source, Func<T, bool> predicate) 
{ 
    return !source.Any(predicate); 
} 

을 당신을 LINQ to SQL과 같은 것들에 대해 을 사용할 수 있습니다.을 최종 호출로 사용하는 경우 - 쿼리 변환기가이를 이해하지 못하기 때문에 중첩 된 쿼리에서 사용할 수 없습니다.)

1

가독성에 대한 우려를 이해합니다. 를 위해! 운영자. 내가 사용한 두 가지 일반적인 해결책은 다음과 같습니다.

A)! 그것이 눈에 띄는과 라

if (! IntCollection.Contains(42)) 
    // ... the ! stands out 

B를 쉽게 볼 수 있도록)가 더 좋은

public static class Readability 
{ 
    public static bool Missing<T>(this Enumerable<T> source, T value) 
    { 
     return ! source.Contains(value); 
    } 
} 
0

나의 제안이와 !을 대체하게 가독성 확장 방법을 쓰기 == false

if (ObjectCollection.Any(o => o.Property == SomeValue) == false) 
    // ... 

if (IntCollection.Contains(42) == false) 
    // ... 
관련 문제