Por qué result.Add (valor) no se ejecuta?
Esto se debe a que LINQ utiliza la ejecución diferida. Hasta que realmente enumere los resultados (el retorno de Select
), los delegados no se ejecutarán.
Para demostrarlo, intente lo siguiente:
List<int> result = new List<int>();
var list = new List<int> { 1, 2, 3, 4 };
var results = list.Select(value =>
{
result.Add(value);//Does not work??
return value;
});
foreach(var item in results)
{
// Just iterating through this will cause the above to execute...
}
Dicho esto, esta es una mala idea . Las consultas de LINQ no deberían tener efectos secundarios si puede evitarlo. Piense en Select
como una forma de transformar sus datos, no ejecutar código.
Sin embargo, esto no se ejecuta, Otra pregunta que es de alguna manera hacer un foreach en un método IEnumerable with Extention?
Se puede escribir su propio método de extensión:
public static void ForEach<T>(this IEnumerable<T> items, Action<T> action)
{
foreach(var item in items)
action(item);
}
Sin embargo, yo recomendaría no hacer esto. Para más detalles, consulte Eric Lippert's post on the subject.
necesita hacer un delegado – MethodMan
@DJKRAZE Ya es un delegado. –
Publiqué mi ejemplo de delegado a continuación para utilizar la lista.ParaEach – MethodMan