¿Qué es appliance y cómo usar expresiones lambda? [duplicar]


Esta pregunta ya tiene una respuesta aquí:

He leído que las expresiones Lambda son una adición increíblemente poderosa a C#, sin embargo, me encuentro desconcertado por ellas. ¿Cómo pueden mejorar mi vida o mejorar mi código? ¿Puede alguien señalar un buen recurso para aprender tal expresiones?

Parecen geniales como el infierno, pero ¿cómo se relacionan con mi vida cotidiana como un asp.net ¿desarrollador?

Edit: Gracias por los ejemplos, y gracias por el enlace a los artículos de Eric White. Todavía estoy digiriendo esos ahora. Una pregunta rápida: ¿son las expresiones lambda útiles para cualquier otra cosa que no sea la consulta? Cada ejemplo que he visto ha sido una construcción de consulta.

 24
Author: Diego Rafael Souza, 2008-08-25

3 answers

: son expresiones lambda útiles para cualquier otra cosa que no sea consultar

Las expresiones Lamba no son más que una forma conveniente de escribir una función 'en línea'.

Por lo que son útiles en cualquier lugar que desee un poco de código que se puede llamar como si fuera una función separada, pero que en realidad está escrito dentro de su llamador. (Además de mantener el código relacionado en la misma ubicación en un archivo, esto también le permite jugar juegos divertidos con alcance variable-ver "cierres" como referencia.)

Un ejemplo de un uso no relacionado con la consulta de un lamba podría ser un poco de código que hace algo asíncrono que se inicia con ThreadPool.QueueUserWorkItem. El punto importante es que también podría escribir esto usando delegados anónimos (que eran una introducción de C#2), o simplemente una función miembro de clase separada.

Esto http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx es una excelente introducción paso a paso en todas estas cosas, que podrían ayudarte.

 12
Author: Will Dean,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-27 20:41:17

Las Lambdas llevan la programación funcional a C#. Son funciones anónimas que se pueden pasar como valores a otras funciones. Usado más en LINQ.

Aquí hay un ejemplo artificial:

List<int> myInts = GetAll();
IEnumerable<int> evenNumbers = myInts.Where(x => x % 2 == 0);

Ahora, cuando usted foreach a través de evenNumbers la lamda

x=> x % 2 == 0

Se aplica entonces como filtro a myInts.

Se vuelven realmente útiles para aumentar la legibilidad de algoritmos complicados que tendrían muchos anidados SI condicionales y bucles.

 7
Author: Brian Leahy,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-24 22:14:25

Aquí hay un ejemplo simple de algo genial que puedes hacer con lambdas:

List<int> myList = new List<int>{ 1, 2, 3, 4, 5, 6, 7, 8, 9 };
myList.RemoveAll(x => x > 5);
//myList now == {1,2,3,4,5}

El método removeAll toma un predicado(un delegado que toma argumentos y devuelve un bool), cualquiera que coincida con él se elimina. Usar una expresión lambda lo hace más simple que declarar el predicado.

 5
Author: Corey,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2008-08-24 22:07:58