使用函数作为Action参数

时间:2016-02-06 19:37:04

标签: c# lambda observablecollection

对于我的方案,我使用List<T> removable来删除变量ObservableCollection<T> collection中的项目。我不相信我可以在此处使用Except方法,因为我需要collection来创建更改事件。

removable.ForEach(profile => collection.Remove(profile));

将函数作为Action参数传递是否有更好的语法?在Java中我只会传递方法:

removable.stream().forEach(collection::remove);

1 个答案:

答案 0 :(得分:5)

在Java中,如果函数的签名匹配,则可以传递函数,就像在C#中一样,所以不,如果函数签名不相同,那么就没有更好的方法,就像在Java中一样。

但是,您始终可以创建一个扩展来接受任何返回类型,如下所示:

public static class Extensions
{
    public static void ForEach<TIn, TOut>(this List<TIn> TheCollection, Func<TIn, TOut> ProcessFunction)
    {
        TheCollection.ForEach((item) => ProcessFunction(item));
    }
}

然后你可以做

removable.ForEach<string, bool>(collection.Remove);

这不是更快,但更具可读性。