Pregunta

Estoy jugando con lo nuevo de C # 3.0 y tengo este código (tomado en su mayoría de MSDN ) pero solo puedo obtener true, false, true ... y no el valor real:

        int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

        var oddNumbers = numbers.Select(n => n % 2 == 1);

        Console.WriteLine("Numbers < 5:");
        foreach (var x in oddNumbers)
        {
            Console.WriteLine(x);
        }

¿Cómo puedo solucionarlo para mostrar la lista de enteros?

¿Fue útil?

Solución

Cambia tu " Seleccionar " a " Donde "

    int[] numbers = { 5, 4, 1, 3, 9, 8, 6, 7, 2, 0 };

    var oddNumbers = numbers.Where(n => n % 2 == 1);

    Console.WriteLine("Odd Number:");
    foreach (var x in oddNumbers)
    {
        Console.WriteLine(x);
    }

El " Seleccionar " El método es crear una nueva lista del resultado lambda para cada elemento (verdadero / falso). El " Donde " El método es el filtrado basado en la lambda.

En C #, también puede utilizar esta sintaxis, que puede encontrar más clara:

        var oddNumbers = from n in numbers
                         where n % 2 == 1
                         select n;

que el compilador traduce a:

var oddNumbers = numbers.Where(n => n % 2 == 1).Select(n => n);

Otros consejos

numbers.Select(n => n % 2 == 1);

Cambia esto a

numbers.Where(n => n % 2 == 1);

Lo que hace la selección es " convertir " una cosa a otra Entonces, en este caso, es " Convertir " n a " n% 2 == 1 " (que es un booleano) - por lo tanto, obtienes todo lo verdadero y falso.

Generalmente se usa para obtener propiedades sobre cosas. Por ejemplo, si tuvieras una lista de objetos Person y quisieras obtener sus nombres, lo harías

var listOfNames = listOfPeople.Select( p => p.Name );

Puedes pensar en esto así:

  • Convierta la lista de personas en una lista de cadenas, usando el siguiente método: (p = > p.Name)

Para " seleccionar " (en el " filtrado " de la palabra) un subconjunto de una colección, debe usar Where.

Gracias a Microsoft por la terrible denominación

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top