Что делают множественные операторы возврата в Linq.Select ()? - PullRequest
1 голос
/ 23 апреля 2020

Я вижу много операторов выбора с операторами возврата в них, и я не понимаю, что происходит, когда объект возвращается из оператора выбора. Может кто-нибудь объяснить, пожалуйста?

var results = swimEntries
    .Select(se =>
{
      if (se.Tag == "DM+" || se.Tag == "DM-")
      {
         var modelEntry =
             modelEntries.Find(e => e.Tag == se.Tag);


         return modelEntry;
      }

   return se;
})
.ToList();

1 Ответ

3 голосов
/ 23 апреля 2020

То, что вы видите здесь, является лямбда-выражением. Select() будет вызывать для каждого элемента код в его теле. Когда se.Tag удовлетворяет некоторым критериям, он будет искать объект в modelEntries.

Вы можете написать это утверждение также как:

var results = new List<ModelEntry>();  // <-- i don't know the exact type.. (wild guess)

foreach(var se in swimEntries)
{
    if (se.Tag == "DM+" || se.Tag == "DM-")
    {
        var modelEntry = modelEntries.Find(e => e.Tag == se.Tag);
        results.Add(modelEntry);
    }
    else
        results.Add(se);
}

или если вы хотите сохранить Select оператор, вы можете сохранить тело в отдельной функции:

private ModelEntry SearchForSomething(ModelEntry se)
{
    if (se.Tag == "DM+" || se.Tag == "DM-")
    {
        var modelEntry = modelEntries.Find(e => e.Tag == se.Tag);

        return modelEntry;
    }
    return se;
}


var results = swimEntries.Select(SearchForSomething).ToList();
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...