2011-04-12 18 views
9

es posible sustituir un bucle foreach con una expresión lambda en LINQ (.Select))?efectos secundarios LINQ

List<int> l = {1, 2, 3, 4, 5}; 
foreach (int i in l) 
    Console.WriteLine(i); 

Para:

List<int> l = {1, 2, 3, 4, 5}; 
l.Select(/* print to console */); 

Respuesta

11

No hay LINQ equivalente de foreach, aunque es bastante fácil de implementar uno mismo.

Eric Lippert da una buena descripción here de por qué esto no se puso en práctica en sí misma LINQ.

Sin embargo, si su colección es una lista (la que parece estar en el ejemplo), puede utilizar List.ForEach:

myList.ForEach(item => Console.WriteLine(item)); 
+0

acabo de agregar '.ToList()' en el extremo de la cadena linq y, a continuación '.ForEach (Console.WriteLine)' –

2

Usted puede utilizar el método List<T>.ForEach.

l.ForEach(i => Console.WriteLine(i)); 
1

List.ForEach utiliza el delegado de acción. De ahora en adelante esa será la elección correcta.

4

Para cualquier IEnumerable, que puede hacer:

items.Any(item => 
{ 
    Console.WriteLine(item); 
    return false; 
} 

pero esto sería completamente equivocado! Es como usar un zapato para martillar la uña. Semánticamente, no tiene sentido.

Cuestiones relacionadas