2008-08-24 18 views
20

He leído que las Expresiones Lambda son una adición increíblemente poderosa a C#, pero me encuentro desconcertado por ellas. ¿Cómo pueden mejorar mi vida o mejorar mi código? ¿Alguien puede señalar un buen recurso para aprender tales expresiones?¿Cuál es un buen uso de las expresiones lambda y cómo puedo aprender a usarlas?

Parecen geniales como el infierno, pero ¿cómo se relacionan con mi día a día como desarrollador de asp.net?

Editar: Gracias por los ejemplos, y gracias por el enlace a los artículos de Eric White. Todavía estoy digiriendo ésos ahora. Una pregunta rápida: ¿las expresiones lambda son útiles para algo más que consultar? Cada ejemplo que he visto ha sido una construcción de consulta.

+0

Estas son buenas respuestas, pero también se han pedido antes. La otra [pregunta] (http://stackoverflow.com/questions/16501/what-is-a-lambda-function) es un buen recurso. –

Respuesta

9

: son expresiones lambda útiles para otra cosa que consultar

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

Así 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 la persona que llama. (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; consulte 'cierres' para obtener una referencia.)

Un ejemplo de uso no relacionado con consultas de un lamba puede ser un poco de código que hace algo asincrónicamente que comiences 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 de miembro de clase separada simple.

Esta http://blogs.msdn.com/jomo_fisher/archive/2005/09/13/464884.aspx es una excelente introducción paso a paso a todo esto, que podría ayudarlo.

6

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

Aquí está un ejemplo artificioso:

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

Ahora cuando forEach través evenNumbers la lambda

x=> x % 2 == 0 

se aplica entonces como un filtro para myInts.

Se vuelven realmente útiles para aumentar la legibilidad de los algoritmos complicados que tendrían muchos contornos y bucles FI intercalados.

4

Aquí es un simple ejemplo de algo fresco que puede 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 se lleva a argurments y devuelve un bool), cualquiera que coincidan con ella se eliminan. Usar una expresión lambda lo hace más simple que declarar el predicado.

Cuestiones relacionadas