我们使用或foreach循环收集并处理每个条目。
C#中的集合的所有新lambda函数是否还有其他选择?
传统的做事方式
foreach(var v in vs)
{
Console.write(v);
}
有什么相似的吗?
vs.foreach(v => console.write(v))
答案 0 :(得分:15)
List有ForEach方法,但IEnumerable没有。
关于此,有很多问题/答案。我认为它在IEnumerable中没有实现的主要原因是,Linq on Enumerables“意味着”是副作用,因为它是一种查询语言。
Eric Lippert在他的博客上解释了他的想法。
http://blogs.msdn.com/ericlippert/archive/2009/05/18/foreach-vs-foreach.aspx
答案 1 :(得分:8)
是
IList
中有一个ForEach扩展方法:
列表有一个ForEach方法:
List<string> list = new List<string>() { "1", "2", "3", "4" };
list.ForEach(s => Console.WriteLine(s));
这就是你要找的东西吗?
答案 2 :(得分:3)
List(T).ForEach
正是如此。
答案 3 :(得分:2)
默认情况下,没有一个 您可以定义自己的:
public static void ForEach<T>(this IEnumerable<T> source, Action<T> action) { foreach(T val in source) action(val); }
答案 4 :(得分:2)
在这样做的过程中,我最后又向前迈进了一步,写了一次&lt; T&gt;和ForEvery&lt; T&gt;流畅的扩展方法,允许对每个项目进行操作,并且只在该链中执行一次操作,如果没有其他原因,那么它们在当时似乎是个好主意。
以下是代码:
public static class EnumerableExtensions
{
public static void ForEach<T>(this IEnumerable<T> collection, Action<T> action)
{
foreach (var item in collection)
{
action(item);
}
}
public static IEnumerable<T> Once<T>(this IEnumerable<T> collection,
Func<IEnumerable<T>, bool> predicate, Action<IEnumerable<T>> action)
{
if (predicate(collection))
action(collection);
return collection;
}
public static IEnumerable<T> ForEvery<T>(this IEnumerable<T> collection,
Func<T, bool> predicate, Action<T> action)
{
foreach (var item in collection)
{
if (predicate(item))
action(item);
}
return collection;
}
}
您可以在我的博文Extend IEnumerable with ForEach and Once Methods上找到示例用法代码。
答案 5 :(得分:1)
答案 6 :(得分:0)
static void Main(string[] args)
{
int[] i = {1, 2, 3, 4, 5, 6, 7, 78, 8, 9};
var data = i.ToList();
data.ForEach(m => { Console.WriteLine(m); });
Console.ReadKey();
}
答案 7 :(得分:0)
vs.ToList().ForEach(item => Console.WriteLine(item));
答案 8 :(得分:0)
.NET 3.5的Linq没有Foreach,但LinqBridge提供了一个。我习惯使用Linqbridge,我自然assumed它是.NET 3.5 Framework的一部分
如果您认为它可以为您的程序带来清晰度
,只需将其添加到您的扩展方法集合中即可static class Helper
{
public static IEnumerable<t> ForEeach<t>
(this IEnumerable<t> source, Action<t> act)
{
foreach (T element in source) act(element);
return source;
}
}