执行操作<;T>;通过IEnumerable特征

本文关键字:通过 IEnumerable 特征 gt lt 执行 操作 | 更新日期: 2023-09-27 18:29:28

我有这个代码:

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

对于数组中的每个项,我希望执行一个Action。。。。

int[]已经实现了Ienumerable

我想在没有"ToList()"的情况下执行操作

是否有其他解决方案(使用一行代码)(不使用toList?即使用其IEnumerable特性)

执行操作<;T>;通过IEnumerable特征

您可以使用Array.ForEach代替:

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

甚至1:

Array.ForEach(g, Console.Write);

不过,就我个人而言,我可能会使用foreach循环,因为Eric Lippert给出的原因。。。


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

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

如果你对一行代码和IEnumerable非常热衷,你可以使用(或滥用)像Any()All()这样的方法,并在返回一个合适的值之前进行所需的操作(在这种情况下,打印),该值将导致迭代继续。

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

受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);
        }
    }