List <T> .ForEach()方法不见了吗?

我最近开始涉足Windows 8地铁,发现我的一个老朋友似乎已经失踪了。

我倾向于使用.ForEach()方法,而不是使用传统的foreach()构造,而且我很快意识到这种方法不可用。 例如,这个代码不会在metro应用程序下编译:

 var list = new List<string>(); list.ForEach(System.Diagnostics.Debug.WriteLine); 

我搜查了一下,看看能否find这方面的讨论,但是没有办法。 我只是呆滞,还是真的走了?

它确实消失了:

列表<T> .ForEach已被删除在Metro风格的应用程序。 虽然这个方法看起来很简单,但是当列表被传递给ForEach的方法突变时,它有一些潜在的问题。 相反,build议您只使用一个foreach循环。


Wes Haggard | .NET Framework团队(BCL)| http://blogs.msdn.com/b/bclteam/

然而,非常奇怪的是,它在文档中出现 ,其中没有任何地方表示.NET应用程序(以前称为Metro风格应用程序的.NET)不支持此方法。 也许这只是文件组的一部分的一个疏忽。

为了弄清楚为什么它不再被包含在内,请在微软的C#团队工作的人阅读这篇文章: http : //blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach -VS-foreach.aspx

基本上,这是哲学。 “LINQ”特性受到function性编程范例的高度启发,而ForEach扩展则面临这种风格……它鼓励了差劲的function风格。

另一种方法是自己定义它:

 public static IEnumerable<T> ForEach<T>(this IEnumerable<T> enumeration, Action<T> action) { foreach(T item in enumeration) { action(item); yield return item; } } 

信用: IEnumerable <T>的foreach相当于LINQ

(注意:不是重复的)