Использование LINQ ForEach с анонимными методами в VB.NET - PullRequest
15 голосов
/ 16 мая 2011

Я пытаюсь заменить классический цикл For Each расширением LINQ ForEach в VB.NET ...

  Dim singles As New List(Of Single)(someSingleList)
  Dim integers As New List(Of Integer)

  For Each singleValue In singles
    integers.Add(CInt(Math.Round(singleValue)))
  Next singleValue

Может быть, как-то так?

  singles.ForEach(Function(s As [Single]) Do ???

Как я могу правильно сделать это, используя анонимные методы (т.е. без объявления новой функции)?

Ответы [ 3 ]

21 голосов
/ 16 мая 2011

Попробуйте это:

singles.ForEach(Sub(s As [Single]) integers.Add(CInt(Math.Round(s))))

Вам нужен Sub здесь, потому что тело вашего цикла For Each не возвращает значение.

4 голосов
/ 25 сентября 2012

Скорее, используя метод расширения .ForEach, вы можете просто напрямую получить результаты следующим образом:

Dim integers = singles.Select(Function(x) Math.Round(x)).Cast(Of Integer)()

Или без использования .Cast, например:

Dim integers = singles.Select(Function(x) CInt(Math.Round(x)))

Это избавляет вас от необходимости предварительно объявить List(Of Integer), и я также думаю, что более ясно, что вы просто применяете преобразование и производите результат (что ясно из назначения).

Примечание: это произвелоIEnumerable(Of Integer), который можно использовать в большинстве мест, где вы используете List(Of Integer) ... но вы не можете добавить к нему.Если вы хотите List, просто нажмите .ToList() до конца приведенных выше примеров кода.

1 голос
/ 16 мая 2011

Вы бы использовали функцию, если ожидаете, что встроенное выражение вернет значение. Например:

Dim myProduct = repository.Products.First(Function(p) p.Id = 1)

При этом использовалось бы выражение Function, потому что оно вычисляется как логическое (p.Id = 1).

Вам нужно использовать Sub, потому что из выражения ничего не возвращается:

singles.ForEach(Sub(s) integers.Add(CInt(Math.Round(s))))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...