2010-01-29 4 views
7

나는이 패턴을 많이 보았다. 이것을 작성하는 더 좋은 방법이 있습니까?if foreach에 대한 진술

  bool hit=false; 
      foreach (var tag in tags) 
       if (tag == sz) 
       { 
        hit = true; 
        break; 
       } 
      if (hit) continue; 
      //tags.add(sz); or whatever i wanted to do 

다른 언어로 된 if sz in tags을 알고 있습니다. 나는 도움이 될 수 linq에 뭔가를 theres을 바란다? 그냥 주어진 경우 알고 싶은 경우

if (tags.Any(tag => InvolvedLogic(tag))) ... 
+0

LINQ는 도움이 될 수. 정확한 구문을 모르지만 selectedTags = tags.Where (태그 => 태그! = sz)와 같은 것입니다. –

+1

코드가 의미가 없습니다. 중괄호가 빠졌습니까? 그럼에도 여전히 의미가 없습니다. –

+2

@ 마크, 그것에 대해 무의미한 무엇입니까? 저는 개인적으로 몇 가지 중괄호를 넣었을 것입니다. 그러나이 코드는 메서드, 속성, 이벤트 또는 인덱서 내부에있는 루프 안에 코드가있는 한 합법적 인 코드 조각입니다.이 코드는 차례로 형식 안에 있습니다. –

답변

12

: tags 가정

+0

당신의 가정이 더 정확하다고 생각합니다. – ChaosPandion

8

List<T>입니다 상품이 tags 인 경우 :

if(tags.Any(t => t == sz)) 
{ 
    // Do stuff here 
} 

당신이 발견 된 항목에 대한 참조를 잡아하려면는 수행

var foundTag = tags.FirstOrDefault(t => t == sz); 
// foundTag is either the first tag matching the predicate, 
// or the default value of your tag type 
+0

달콤한 이것은 모든 IEnumerable 개체에서 작동하는 것 같습니다! –

+0

실제로'ICollection '이지만 실제로는 그렇습니다. – Aistina

2

: 더 일반적인 문제에 대한

if (tags.Contains(sz)) ... 

: 예를 들어

if (tags.Contains(sz)) 
{ 
    // ... 
} 
0
if (tags.Any(t=>t == sz) == true) 
{ 
    //... 
} 
+0

Any만큼 효율적이지 않습니다. 이미 항목이 있어도 모든 항목을 처리합니다. –

+1

네가 맞습니다. 나는 그것을 대안으로 썼다. – NetSide

+3

실제로; 이러지 마. 누군가 "돈이 있습니까?"라고 말하면 주머니에있는 청구서를 계산할 필요가 없으므로 답이 있으면 그냥 볼 필요가 있습니다. –