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

时间:2012-04-24 13:57:12

标签: c# .net windows-8 windows-store-apps

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

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

var list = new List<string>();

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

我已经搜索过,看看我是否可以找到任何关于此的讨论,但是无法进行。我只是在变钝,还是真的消失了?

3 个答案:

答案 0 :(得分:43)

It's indeed gone:

  

列表&lt; T&gt; .ForEach已在Metro风格应用中删除。虽然该方法看起来很简单,但是当列表被传递给ForEach的方法变异时,它会有许多潜在的问题。相反,建议您只使用foreach循环。

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

然而,非常奇怪的是,它出现在documentation中,其中没有任何地方声明.NET for Windows Store应用程序(以前的.NET用于Metro风格的应用程序)不支持此方法。也许这只是文档团队的一部分。

答案 1 :(得分:18)

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

基本上,这是哲学。 “LINQ”功能受到功能编程范式的高度启发,ForEach扩展面对于它......它鼓励功能不佳的风格。

答案 2 :(得分:16)

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

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

信用:LINQ equivalent of foreach for IEnumerable<T>

(注意:不重复)