2010-01-29 13 views
7

Zauważam, że robię ten wzór bardzo często. Czy istnieje lepszy sposób, aby to napisać?jeśli oświadczenie na 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 

Wiem, że if sz in tags istnieje w innych językach. Mam nadzieję, że jest coś w Linq, które może pomóc?

+0

LINQ może pomóc. Nie znam dokładnej składni, ale będzie to coś w rodzaju selectedTags = tags.Where (tag => tag! = Sz); –

+1

Twój kod nie ma sensu. Czy brakuje ci nawiasów klamrowych? Nawet wtedy to jeszcze nie ma sensu. –

+2

@ Mark, co jest bezsensowne? Osobiście wstawiłbym jeszcze kilka nawiasów klamrowych, ale jest to legalny fragment kodu, pod warunkiem, że kod znajduje się wewnątrz pętli, która jest wewnątrz metody, właściwości, zdarzenia lub indeksu, który z kolei znajduje się wewnątrz typu. –

Odpowiedz

12

Dla przykładu:

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

Dla bardziej ogólnego problemu:

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

Myślę, że twoje założenie jest bardziej poprawne. – ChaosPandion

8

Zakładając tags jest List<T>:

if (tags.Contains(sz)) 
{ 
    // ... 
} 
+0

słodki to wydaje się działać na każdym przedmiocie IEnumerable! –

+0

Dowolny 'ICollection ' faktycznie, ale tak. – Aistina

2

Jeśli chcesz tylko wiedzieć, czy dana pozycja jest w tags, do:

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

Jeśli chcesz, aby pobrać referencję do znalezionego elementu, zrobić:

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
if (tags.Any(t=>t == sz) == true) 
{ 
    //... 
} 
+0

Nie tak skuteczny jak dowolny - spowoduje to przejście wszystkich elementów, nawet jeśli już jest. –

+1

Tak, masz rację. Napisałem to jako alternatywę. – NetSide

+3

Rzeczywiście; nie rób tego. Jeśli ktoś mówi "czy masz jakieś pieniądze?" nie musisz liczyć rachunków w kieszeni, aby dać odpowiedź, wystarczy sprawdzić, czy są jakieś. –