List <T> .ForEach()方法消失了吗?

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

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

var list = new List<string>();

list.ForEach(System.Diagnostics.Debug.WriteLine);

我搜寻了一下,看看能否找到这方面的任何讨论,但无法做到。 我只是懒惰,还是实际上消失了?


它确实消失了:

列表<T> .ForEach已在Metro风格应用中删除。 尽管该方法看起来很简单,但当列表被传递给ForEach的方法突变时,它有许多潜在的问题。 相反,建议您只使用一个foreach循环。


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

然而,很奇怪的是,它在文档中出现,其中没有任何地方声明在Windows应用商店应用程序的.NET(以前称为Metro风格应用程序的.NET)中不支持此方法。 也许这只是部分文档团队的疏忽。


要了解为什么可能不再包含它,请阅读由Microsoft在C#团队工作的人员撰写的此文章:http://blogs.msdn.com/b/ericlippert/archive/2009/05/18/foreach -VS-foreach.aspx

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


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

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

(注意:不是重复的)

链接地址: http://www.djcxy.com/p/53005.html

上一篇: Is the List<T>.ForEach() method gone?

下一篇: Iterate with LINQ over a list and set founded varible