“for each”操作是否有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);
}
没有Linq ForEach扩展。但是,List类有一个ForEach方法,如果您愿意直接使用List的话。
不管怎样,标准的foreach语法会给你想要的结果,而且它可能更容易阅读:
foreach (var x in someValues)
{
list.Add(x + 1);
}
如果你想要一个Linq风格的扩展。自己实现这个是很简单的。
public static void ForEach<T>(this IEnumerable<T> @this, Action<T> action)
{
foreach (var x in @this)
action(x);
}
没有Linq ForEach扩展。但是,List类有一个ForEach方法,如果您愿意直接使用List的话。
不管怎样,标准的foreach语法会给你想要的结果,而且它可能更容易阅读:
foreach (var x in someValues)
{
list.Add(x + 1);
}
如果你想要一个Linq风格的扩展。自己实现这个是很简单的。
public static void ForEach<T>(this IEnumerable<T> @this, Action<T> action)
{
foreach (var x in @this)
action(x);
}
Array和List<T>类已经有ForEach方法,尽管只有这个特定的实现。(顺便说一下,注意前者是静态的)。
不确定它是否真的比foreach语句有很大的优势,但您可以编写一个扩展方法来为所有IEnumerable<T>对象完成这项工作。
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
action(item);
}
这将允许您在问题中发布的确切代码按照您想要的方式工作。