2010-02-25 7 views

Respuesta

16

Una expresión lambda se utiliza para crear una función anónima. Aquí se asigna una función anónima a una variable delegado:

Func<int, int> increase = (a => a + 1); 

continuación, puede utilizar el delegado para llamar a la función:

var answer = increase(41); 

expresiones Normalmente lambda se utilizan para enviar un delegado a un método, por

List<int> list = new List<int>(); 
list.Add(1); 
list.Add(2); 

list.ForEach(n => Console.WriteLine(n)); 
+0

Gracias por su respuesta. Puedo ver su tremendo poder y cuánto tiempo puede ahorrar – Zyon

+1

También es posible desde dentro de una lambda acceder a las variables en el alcance de la función externa. Entonces, en el ejemplo anterior, puede acceder al objeto list dentro de la expresión lambda. – Oliver

2

Un Lambda es simplemente un delegado, es una función anónima que puede crear para su posterior ejecución.

A Lambda Expression es un delegado sin compilar en forma de un Árbol de expresiones que puede manipular antes de compilar y ejecutar.

http://msdn.microsoft.com/en-us/library/bb397687.aspx

+2

Una expresión de Lamda no es un delegado. Es fácilmente transferible a un delegado, pero también es transferible a un Árbol de Expresión, que no es válido para un delegado. Consulte http://msdn.microsoft.com/en-us/library/bb397951.aspx – Manu

+0

punto justo, actualizado –

2

Tal vez estoy siendo un poco simplista, pero, si fuera usted, para empezar consideraría lambdas como una buena forma de acortar el código eliminando cosas como bucles foreach anidados o elementos n superiores .

Así que si usted está funcionando hoteles redondas encontrar algunos con habitaciones baratas que podría (suponiendo hoteles en IEnumerable):

cheapHotels = hotels.Where(h => h.PriceFrom < 50) 

Una vez que esto empieza a hacer click en Puede pasar a algo más complejo, esto es una método aleatorio que puedo encontrar en mi proyecto actual usando lambdas (probablemente mellado de otro lugar!):

private T DeserializeObject<T>(XmlDocument xDoc, string typeName) 
{ 
    Type type = AppDomain.CurrentDomain.GetAssemblies().SelectMany(a => a.GetTypes()).Single(t => t.FullName == typeName); 

    object o; 
    var serializer = new XmlSerializer(typeof(T)); 
    using (TextReader tr = new StringReader(xDoc.InnerXml)) 
    { 
     o = serializer.Deserialize(tr); 
     tr.Close(); 
    } 
    return (T)o; 

} 
Cuestiones relacionadas