Linq/лямбда-вопрос о .Select (новичок, изучая 3.0)

StackOverflow https://stackoverflow.com/questions/241967

  •  04-07-2019
  •  | 
  •  

Вопрос

Я играю с новыми возможностями C#3.0, и у меня есть этот код (в основном взятый из MSDN), но я могу получить только истинное, ложное, истинное...а не реальная стоимость:

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

Как я могу это исправить, чтобы показать список целых чисел?

Это было полезно?

Решение

Измените " выберите " на "Где"

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

" Выбрать " Метод создает новый список лямбда-результата для каждого элемента (true / false). & Quot; Где " Метод фильтрации на основе лямбда.

В C # вы также можете использовать этот синтаксис, который может показаться вам более понятным:

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

который компилятор переводит в:

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

Другие советы

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

Измените это на

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

Что делает select, так это «конвертирует» одно в другое.Итак, в данном случае это «Преобразование» n в «n % 2 == 1» (что является логическим значением) — следовательно, вы получаете все значения «истина» и «ложь».

Обычно он используется для получения свойств вещей.Например, если у вас есть список Person объекты и вы хотите получить их имена, вы бы сделали

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

Вы можете думать об этом так:

  • Преобразуйте список людей в список строк, используя следующий метод:( p => имя п.)

Чтобы «выбрать» (в «фильтрационном» смысле этого слова) подмножество коллекции, вам нужно использовать Where.

Спасибо Microsoft за ужасное наименование

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top