Pergunta

Eu estou jogando com o novo material de C # 3.0 e eu tenho esse código (principalmente tomadas a partir MSDN ), mas eu só pode obter verdadeiro, falso, verdadeiro ... e não o 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);
        }

Como posso corrigir isso para mostrar a lista de inteiro?

Foi útil?

Solução

Mude o seu "Select" para um "Onde"

    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);
    }

O método de "Select" é a criação de uma nova lista do resultado lambda para cada elemento (true / false). O "Onde" método é a filtragem baseada na lambda.

Em C #, você também pode usar essa sintaxe, o que você pode encontrar mais claro:

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

que o compilador traduz em:

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

Outras dicas

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

Alterar isso para

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

O que seleccionar faz é "convertido" uma coisa para outra. Portanto, neste caso, é "Conversão" n para "n% 2 == 1" (que é um boolean) - daí você começa todo o verdadeiro e os falsos

.

É geralmente usado para obter propriedades sobre as coisas. Por exemplo, se você tivesse uma lista de objetos Person, e você queria para obter seus nomes, você faria

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

Você pode pensar desta maneira:

  • Converter a lista de pessoas em uma lista de strings, utilizando o seguinte método: (p => p.Name)

Para "selecione" (na "filtragem" sentido da palavra) um subconjunto de uma coleção, você precisa usar Onde.

Graças Microsoft para o terrível nomeação

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top