2010-01-29 21 views
7

Me doy cuenta de que hago este patrón mucho. ¿Hay una mejor manera de escribir esto?if declaración en un 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 

Yo sé if sz in tags existen en otros idiomas. Espero que haya algo en linq que pueda ayudar?

+0

LINQ podría ayudar. No sé la sintaxis exacta, pero sería algo como selectedTags = tags.Where (tag => tag! = Sz); –

+1

Tu código no tiene sentido. ¿Te estás perdiendo algunas llaves? Incluso entonces todavía no tiene sentido. –

+2

@Mark, ¿qué tiene de absurdo? Personalmente, habría agregado algunas llaves más, pero este es un fragmento de código legal, siempre que el código se encuentre dentro de un bucle, que está dentro de un método, propiedad, evento o indexador, que a su vez está dentro de un tipo. –

Respuesta

12

Por ejemplo:

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

Para el problema más general:

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

Creo que su suposición es más correcta. – ChaosPandion

8

Suponiendo tags es una List<T>:

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

dulce parece que funciona en cualquier objeto IEnumerable! –

+0

Cualquier 'ICollection ' en realidad, pero sí. – Aistina

2

Si lo que desea es saber si un determinado el artículo está en tags, do:

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

Si quieres tomar una referencia al elemento encontrado, hacer:

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

No es tan eficiente como Cualquiera - esto recorrerá todos los artículos incluso cuando ya tenga uno. –

+1

Sí, tienes razón. Lo escribí como una alternativa. – NetSide

+3

De hecho; no hagas esto Si alguien dice "¿tienes dinero?" no tiene que contar las facturas en su bolsillo para dar una respuesta, solo necesita ver si hay alguna. –