Если вы используете VB9 (VS2008), я не думаю вы сможете легко использовать анонимную функцию - насколько мне известно, анонимные функции в VB9 иметь , чтобы быть реальными функциями (т.е. они должны возвращать значение), тогда как Action<T>
ничего не возвращает. Анонимные методы C # 2 и лямбда-выражения C # 3 являются более общими, поэтому вы увидите множество примеров, использующих List<T>.ForEach
из C #, и очень немногие, использующих VB: (
Вы могли бы написать оболочку MakeAction
, которая принимает a Function<T,TResult>
и возвращает Action<T>
, но я подозреваю, что другие ограничения анонимных функций VB9 сделают это непрактичным.
Хорошей новостью является то, что VB10 имеет гораздо больше поддержки анонимных функций . (C # 4 и VB10 приобретают функции друг друга - я полагаю, что отныне MS пытается добиться языкового паритета, в большей степени, чем раньше.)
До этого для использования List<T>.ForEach
вам нужно написать соответствующий Sub
и использовать AddressOf
для создания делегата из него. Вот небольшой пример:
Imports System
Imports System.Collections.Generic
Public Class Test
Shared Sub Main()
Dim names as New List(Of String)
names.Add("Jon")
names.Add("Holly")
names.ForEach(AddressOf PrintMe)
End Sub
Shared Sub PrintMe(ByVal text as String)
Console.WriteLine(text)
End Sub
End Class