tutorial sintaxis query español c# linq

c# - sintaxis - linq>#



Introducción a la lista de C#comprehensions (5)

¿Cómo puedo realizar listas de comprensión en C #?


@Ian P

return (from user in users where user.Valid select user.Name).ToArray();


Encontré esto cuando estaba buscando cómo hacer una lista de comprensiones en C # ...

Cuando alguien dice listas de comprensión, inmediatamente pienso en Python. El siguiente código genera una lista que se ve así:

[0,2,4,6,8,10,12,14,16,18]

La forma de Python es así:

list = [2*number for number in range(0,10)]

Cª#:

var list2 = from number in Enumerable.Range(0, 10) select 2*number;

Ambos métodos son evaluados perezosamente.



Si bien esto no es un tutorial, aquí hay un código que ilustra el concepto:

public List<string> ValidUsers(List<User> users) { List<string> names = new List<string>(); foreach(User user in users) { if(user.Valid) { names.Add(user.Name); } } return names; }


Una Comprensión de lista es un tipo de notación establecida en la que el programador puede describir las propiedades que los miembros de un conjunto deben cumplir. Generalmente se usa para crear un conjunto basado en otros conjuntos o conjuntos ya existentes al aplicar algún tipo de combinación, función de transformación o reducción a los conjuntos existentes.

Considere el siguiente problema: tiene una secuencia de 10 números del 0 al 9 y necesita extraer todos los números pares de esa secuencia. En un lenguaje como la versión 1.1 de C #, casi te limitabas al siguiente código para resolver este problema:

ArrayList evens = new ArrayList(); ArrayList numbers = Range(10); int size = numbers.Count; int i = 0; while (i < size) { if (i % 2 == 0) { evens.Add(i); } i++; }

El código anterior no muestra la implementación de la función Rango, que está disponible en el siguiente listado de código completo. Con la llegada de C # 3.0 y .NET Framework 3.5, una notación de Comprensión de listas basada en Linq ahora está disponible para los programadores de C #. El código anterior de C # 1.1 se puede portar a C # 3.0 de la siguiente manera:

IEnumerable<int> numbers = Enumerable.Range(0, 10); var evens = from num in numbers where num % 2 == 0 select num;

Y técnicamente hablando, el código anterior de C # 3.0 se podría escribir como un trazador de líneas moviendo la llamada a Enumarable.Range a la expresión de Linq que genera la secuencia de los pares . En la Comprensión de la Lista C #, estoy reduciendo los números establecidos al aplicar una función (el módulo 2) a esa secuencia. Esto produce la secuencia de evens de una manera mucho más concisa y evita el uso de la sintaxis de bucle. Ahora, usted puede preguntarse: ¿esto es puramente sintaxis? No lo sé, pero definitivamente investigaré, e incluso haré la pregunta yo mismo aquí. Sospecho que esto no es solo azúcar de sintaxis y que hay algunas optimizaciones verdaderas que se pueden hacer al utilizar las mónadas subyacentes.

El listado completo del código está disponible here .