Попробуйте следующее, если оно действительно имеет тип List<T>
.
C #
var list = GetSomeList();
list.ForEach( x => SomeMethod(x) );
' Alternatively
list.ForEach(SomeMethod);
VB.Net
Dim list = GetSomeList();
list.ForEach( Function(x) SomeMethod(x) );
К сожалению .ForEach определен только для List<T>
, поэтому его нельзя использовать с любым общим типом IEnumerable<T>
. Хотя такую функцию легко закодировать
C #
public static void ForEach<T>(this IEnumerable<T> source, Action<T> del) {
foreach ( var cur in source ) {
del(cur);
}
}
VB.Net
<Extension()> _
Public Sub ForEach(Of T)(source As IEnumerable(Of T), ByVal del As Action(Of T)
For Each cur in source
del(cur)
Next
End Sub
При этом вы можете запустить .ForEach на любом IEnumerable<T>
, что делает его пригодным для использования практически с любым запросом LINQ.
var query = from it in whatever where it.SomeProperty > 42;
query.ForEach(x => Log(x));
EDIT
Примечание для использования .ForEach для VB.Net. Вы должны выбрать функцию, которая возвращает значение. Это ограничение лямбда-выражений в VB.Net 9 (VS 2009). Но есть работа вокруг. Скажем, вы хотите вызвать SomeMethod, который является Sub. Просто создайте оболочку, которая возвращает пустое значение
Sub SomeMethod(x As String)
...
End Sub
Function SomeMethodWrapper(x As String)
SomeMethod(x)
Return Nothing
End Function
list.ForEach(Function(x) SomeMethod(x)) ' Won't compile
list.ForEach(function(x) SomeMethodWrapper(x)) ' Works