Linq风格的“For Each”
可能重复:
Linq相当于IEnumerable的foreach
是否有任何Linq风格的语法为“每个”操作?
例如,将基于一个集合的值添加到另一个已存在的集合:
IEnumerable<int> someValues = new List<int>() { 1, 2, 3 };
IList<int> list = new List<int>();
someValues.ForEach(x => list.Add(x + 1));
代替
foreach(int value in someValues)
{
list.Add(value + 1);
}
使用ToList()扩展方法是最佳选择:
someValues.ToList().ForEach(x => list.Add(x + 1));
BCL中没有直接实现ForEach的扩展方法。
尽管BCL中没有扩展方法可以实现这一点,但System
命名空间中仍然有一个选项...如果将Reactive Extensions添加到项目中:
using System.Reactive.Linq;
someValues.ToObservable().Subscribe(x => list.Add(x + 1));
这与上面使用ToList
具有相同的最终结果,但是(理论上)更有效,因为它直接将值传递给委托。
Array
和List<T>
类已经有ForEach
方法,但只有这个特定的实现。 (请注意,前者是static
,顺便说一下)。
不确定它确实提供了比foreach
语句更好的优势,但是您可以编写一个扩展方法为所有IEnumerable<T>
对象执行作业。
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
这将允许您在问题中发布的确切代码正常工作。
没有任何内置的,但你可以很容易地创建自己的扩展方法来做到这一点:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
if (source == null) throw new ArgumentNullException("source");
if (action == null) throw new ArgumentNullException("action");
foreach (T item in source)
{
action(item);
}
}
链接地址: http://www.djcxy.com/p/52991.html
下一篇: Find the last element of an array while using a foreach loop in PHP