linq - 如何使用 LINQ 对对象列表执行函数

标签 linq foreach

我想使用 LINQ 对对象列表中的所有对象执行一个函数。我知道我之前在 SO 上看到过类似的内容,但在几次失败的搜索尝试之后,我发布了这个问题

最佳答案

如果它实际上是 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

有了这个,您可以在任何 IEnumerable<T> 上运行 .ForEach这使得它几乎可以在任何 LINQ 查询中使用。

var query = from it in whatever where it.SomeProperty > 42;
query.ForEach(x => Log(x));

编辑

注意对 VB.Net 使用 .ForEach。您必须选择一个返回值的函数。这是 VB.Net 9 (VS 2009) 中 lambda 表达式的限制。但还有解决办法。假设你想调用 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

关于linq - 如何使用 LINQ 对对象列表执行函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/841361/

相关文章:

javascript - 填充空数组

c# - "The LINQ expression node type ' 调用 ' is not supported in LINQ to Entities"- 难倒了!

.net - 如何使用 linq to sql 外部映射延迟加载属性?

c# - 用于链接查询组合的 Linq 语法

c# - 用于过滤嵌套集合属性的动态表达式树

c# - C# 中的 Foreach struct 奇怪的编译错误

c# - 为什么 IEqualityComparer 没有相应的委托(delegate),而 IComparer 有比较

powershell - Powershell-复制脚本循环

javascript - 遍历数组并成对输出(每个第二个元素的分隔符)

c# - 如何查看从 IEnumerable 返回的对象?