简洁地调用LINQ查询结果的方法
我想对LINQ查询中的每个对象调用MyMethod,最好的方法是什么 目前我正在使用:简洁地调用LINQ查询结果的方法,linq,Linq,我想对LINQ查询中的每个对象调用MyMethod,最好的方法是什么 目前我正在使用: .Select(x => { x.MyMethod (); return x; }).ToArray(); 需要ToArray()立即执行 有没有更简单的方法来写这个(没有foreach) 谢谢我创建了一个应用扩展方法: public static IEnumerable<T> Apply<T>(this IEnumerable<T> source, Action&
.Select(x => { x.MyMethod (); return x; }).ToArray();
需要ToArray()立即执行
有没有更简单的方法来写这个(没有foreach)
谢谢我创建了一个
应用
扩展方法:
public static IEnumerable<T> Apply<T>(this IEnumerable<T> source, Action<T> action)
{
foreach(var item in source)
{
action(item);
yield return item;
}
}
实际上,这类似于
列表。ForEach
方法,只是它返回源的项,以便您可以继续对其应用序列运算符我创建了一个应用
扩展方法:
public static IEnumerable<T> Apply<T>(this IEnumerable<T> source, Action<T> action)
{
foreach(var item in source)
{
action(item);
yield return item;
}
}
实际上,这与列表类似。ForEach方法,只是它返回源代码的项目,以便您可以继续在其上应用序列运算符
你真的什么也得不到。A for each可能是实现这一点的最简单的方法,你可以编写一个扩展方法来实现for each,但是
你真的什么也得不到。你可以指定你自己的可重用扩展方法,在每个元素上运行一个
操作,并返回它
IEnumerable<T> Do(this IEnumerable<T> vals, Action<T> action) {
foreach(T elem in vals) {
action(elem);
yield return elem;
}
}
您可以指定自己的可重用扩展方法,在每个元素上运行操作
,并返回它
IEnumerable<T> Do(this IEnumerable<T> vals, Action<T> action) {
foreach(T elem in vals) {
action(elem);
yield return elem;
}
}
xList已具有所需的方法:.ForEach()。它对每个列表成员调用一个操作
List<x> fooList = ....Select(x => x).ToList();
fooList.ForEach(x => DoSomething(x));
List傻瓜列表=..选择(x=>x).ToList();
傻瓜。ForEach(x=>DoSomething(x));
xList已具有所需的方法:.ForEach()。它对每个列表成员调用一个操作
List<x> fooList = ....Select(x => x).ToList();
fooList.ForEach(x => DoSomething(x));
List傻瓜列表=..选择(x=>x).ToList();
傻瓜。ForEach(x=>DoSomething(x));
在我看来,您不需要调用.to\uuuuuuuuuu转换方法,因为您只希望看到副作用。被动扩展的Do()方法将是一个可行的选择
通过使用Do()方法,您有两个优点(就我而言)
1) 延迟执行(如果需要,可以延迟立即执行)
2) Do()方法有不同的重载,让您对迭代有更多的控制。
例如:Do(onNext、OnError、onCompleted)重载
在我看来,您不需要调用.to____;转换方法,因为您只期望有副作用。被动扩展的Do()方法将是一个可行的选择
通过使用Do()方法,您有两个优点(就我而言)
1) 延迟执行(如果需要,可以延迟立即执行)
2) Do()方法有不同的重载,让您对迭代有更多的控制。
例如:Do(onNext、OnError、onCompleted)重载
Rx
还包括Run
操作符,它与Do
类似,但也执行序列(无需将其存储在数组中的开销)。Rx
还包括Run
操作符,它与Do
类似,但也执行序列(无需将其存储在数组中的开销)。您可以简化它:doulist.ForEach(DoSomething)
您可以简化它:doulist.ForEach(DoSomething)