c# - tutorial - Delegados y Lambdas y LINQ, ¡Oh, Dios mío!
linq lambda c# tutorial (3)
Como desarrollador bastante junior, me encuentro con un problema que pone de relieve mi falta de experiencia y los agujeros en mi conocimiento. Disculpe si el preámbulo aquí es demasiado largo.
Me encuentro en un proyecto que implica mi necesidad de aprender una cantidad de tecnologías nuevas (para mí), que incluyen LINQ (a OBJECTS y XML para los fines de este proyecto), entre otros. Todo lo que he leído hasta ahora sugiere que para utilizar LINQ tendré que comprender completamente lo siguiente (delegados, métodos anónimos y expresiones Lambda).
OK, entonces ahora viene la diversión. He consumido delegados en el pasado ya que he trabajado con el modelo de eventos .NET, pero la mayoría de los detalles se me han ocultado (¡gracias a Microsoft!). Entiendo que en un nivel básico, las instancias de delegado son indicadores de métodos (una simplificación excesiva, lo sé).
Entiendo que un método anónimo es esencialmente un método en línea sin nombre generalmente creado (si no exclusivamente) como un objetivo para un delegado.
También entiendo que las lambdas se usan de diversas maneras para simplificar la sintaxis y se pueden usar para señalar un método anónimo simple a un delegado.
Perdónenme si mi descripción es MALA aquí, este es el nivel básico en el que entiendo estos temas.
Entonces, el desafío:
¿Alguien puede decirme si al menos en un nivel básico si mi comprensión de estos elementos es incluso cercana? No estoy buscando detalles minuciosos esotéricos, solo los conceptos básicos (por ahora).
¿Hasta qué punto necesito entender realmente estos conceptos antes de aplicar LINQ en un proyecto con un efecto razonable? Quiero entenderlo completamente y estoy dispuesto a pasar el tiempo. Simplemente, es posible que no TENGA tiempo para asimilar todo esto antes de tener que realizar algún trabajo.
¿Alguien puede indicarme algunos buenos artículos que explican estos temas y los aplican a ejemplos del "mundo real" para que pueda entender los aspectos básicos de los temas y su aplicación? Lo que quiero decir con el mundo real, es cómo podría usar esto en el contexto de "Clientes y Facturas" en lugar de "Vectores y formas" abstractas o "Animales y vacas". El escenario puede ser un tanto ideado con fines de demostración, pero ojalá no sea estrictamente académico. He encontrado varios ejemplos en línea y en libros, pero pocos parecen ser explicaciones de "inglés sencillo".
Gracias a todos por su paciencia, tiempo y experiencia.
1) Esas descripciones me suenan bastante precisas. A veces, los métodos anónimos y las expresiones lambda necesitarán crear un nuevo tipo para poner el destino del delegado, para que puedan actuar como cierres .
2/3) Leería un poco hasta que esté satisfecho con los delegados, los métodos anónimos y las expresiones lambda. Dedico un capítulo a los cambios relacionados con los delegados en cada uno de C # 2.0 y C # 3.0 en C # en profundidad, aunque, por supuesto, otros libros también entran en detalle. También tengo un artículo , si eso ayuda.
En cuanto a los ejemplos, los delegados se utilizan para muchos propósitos diferentes. Son todas formas diferentes de ver la misma funcionalidad, pero pueden sentirse muy diferentes:
- Proporcionar el código para llamar cuando comienza un nuevo hilo
- Reaccionando a eventos de UI
- Proporcionar el filtro, la selección, el pedido, etc. para una consulta LINQ
- Proporcionar una devolución de llamada cuando finaliza una operación asincrónica
Si tiene alguna situación específica que le gustaría tener como ejemplo, sería más fácil responderla.
EDIT: Debo señalar que es una buena noticia que solo trabaje con LINQ to Objects y LINQ to XML en este momento, ya que eso significa que no necesita comprender los árboles de expresiones todavía. (Son geniales, pero un paso a la vez ...) LINQ to XML es realmente solo una API XML que funciona muy bien con LINQ - por lo que recuerdo, las únicas veces que usará delegados con LINQ to XML son cuando en realidad estás llamando a LINQ to Objects. (Eso es muy bueno, desde luego, pero significa que puedes reutilizar lo que ya has aprendido).
Como ya tiene C # en profundidad, los capítulos 10 y 11 proporcionan bastantes ejemplos del uso de expresiones lambda (y expresiones de consulta que están traducidas en expresiones lambda) en LINQ. El Capítulo 5 tiene algunos ejemplos diferentes del uso de delegados.
¿Dónde puedo encontrar una buena guía en profundidad para C # 3?
1) Su conocimiento hasta ahora parece estar bien. Las expresiones Lambda se convierten en métodos anónimos o System.Linq.Expressions.Expression, según el contexto. Como no está utilizando una tecnología de base de datos, no necesita comprender expresiones (todas las lambdas serán métodos anónimos). No mencionó los métodos de extensión, pero son muy importantes (y fáciles de entender). Asegúrese de ver cómo aplicar un método de extensión a una interfaz, ya que toda la funcionalidad en linq proviene de System.Linq.Enumerable, una colección de métodos de extensión contra IEnumerable (Of T).
2) No necesitas una comprensión profunda de lambdas.
La sintaxis de flecha (=>) fue el mayor obstáculo para mí. La flecha separa la firma y el cuerpo de la expresión lambda.
Recuerde siempre: los métodos Linq no se ejecutan hasta que se enumeran.
Tenga cuidado con el uso de variables de bucle en una lambda . Este es un efecto secundario de la ejecución diferida que es particularmente difícil de rastrear.
3) Claro, estas son algunas de mis respuestas que muestran llamadas al método linq, algunas con xml.