Лямбда-выражение с циклом foreach в C # - PullRequest
0 голосов
/ 05 сентября 2018
 var coupon=" ";

 foreach(var p in products)
 {
     var query = products.Where(b => b.getId() == p.getId()).ToList();

     if (query != null)
     {
         foreach(var q in query)
         {
             coupon = q.getName();
             Console.WriteLine(coupon);
         }
     }
 }

Может кто-нибудь сказать мне, что будет лямбда-выражением этого фрагмента кода

Ответы [ 2 ]

0 голосов
/ 05 сентября 2018

Не каждая операция цикла естественным образом подходит для лямбда-выражения. Лямбда-выражения полезны для проекций данных - то есть преобразования их из одной формы в другую - применения формул и т. Д., Но: это не то, что вы здесь делаете. Вы делаете что-то с данными (Console.WriteLine. Вы могли бы сделать что-то с LINQ здесь, включая SelectMany, но ... это станет меньше читаемый, не более.

То, что у вас есть, просто прекрасно. Единственные изменения, которые я бы сделал:

  • чтобы убрать тест if (query != null) - это никогда не будет ложным
  • удалить ToList() - нет необходимости создавать новый список только для его повторения
  • не нужно объявлять coupon до того, как это потребуется
  • Я мог бы поднять p.getId()

Итак:

 foreach(var p in products)
 {
     var id = p.getID();
     foreach(var q in products.Where(b => b.getId() == id))
     {
         var coupon = q.getName();
         Console.WriteLine(coupon);
     }
 }
0 голосов
/ 05 сентября 2018

В вашем кодовом блоке есть лямбда-выражение , и это единственный аргумент для Where, который выглядит следующим образом:

b => b.getId() == p.getId()

В данном конкретном случае лямбда является эффективно (хотя и не технически) Predicate , которое является причудливым именем для функции, которая проверяет, является ли что-то true или false

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...