通过IEnumerable特性执行动作<t>?</t>

时间:2012-03-29 12:43:33

标签: c# linq .net-4.0 action

我有这段代码:

 int[] g = new int[3] { 1, 2, 3 };
 g.ToList().ForEach(f=>Console.Write(f));

对于数组中的每个项目,我想执行Action ....

int[] 已经实施Ienumerable

我想执行一个没有“ToList()

的动作

是否有任何其他解决方案(使用一行代码行)(没有toList?即使用其IEnumerable特征)

3 个答案:

答案 0 :(得分:8)

您可以改为使用Array.ForEach

Array.ForEach(g, f => Console.Write(f));

甚至 1

Array.ForEach(g, Console.Write);

我个人可能会使用foreach循环来代替reasons given by Eric Lippert ......


1 如果它编译。我已经放弃了尝试预测方法组转换是否可以在泛型类型推断的上下文中工作。

答案 1 :(得分:1)

ForEach()List类中的方法,而不是IEnumerable接口,因此它不会直接用于数组。

如果您是关于执行一行代码和IEnumerable的核心话题,您可以使用(或滥用)Any()All()之类的方法来执行您想要的操作(在此处case,printing)返回一个导致迭代继续的适当值。

或者您可以使用Array.ForEach()

答案 2 :(得分:0)

受Jon Skeet的启发,这是我写的一个有用的扩展方法:

客户端:

var jobs = new List<Job>() 
    { 
        new Job { Id = "XAML Developer" }, 
        new Job { Id = "Assassin" }, 
        new Job { Id = "Narco Trafficker" }
    };
jobs.Execute(ApplyFilter, j => j.Id);

public void ApplyFilter(string filterId) { }

扩展方法:

    public static void Execute<TSource, TKey>(this IEnumerable<TSource> source, Action<TKey> applyBehavior, Func<TSource, TKey> keySelector)
    {
        foreach (var item in source)
        {
            var target = keySelector(item);
            applyBehavior(target);
        }
    }