对IEnumerable的所有成员调用方法

时间:2013-01-31 13:22:06

标签: c# linq extension-methods

我最近一直在玩一些c#扩展,我有一个问题。我为IEnumerables做了一个'ForEach'扩展(List有一个来自Linq,但IEnumerables没有。)这是一个非常简单的:

public static void ForEach<T> (this IEnumerable<T> source, Action<T> action)
{
    foreach (T element in source) {
        action(element);
    }
}

你称之为MyArray.ForEach(element=>element.ElementMethod());

虽然现在我想知道,我可以更进一步,使其成为:MyArray.ForEach(ElementMethod);

编辑:已经有一些有趣的答案,虽然我正在尝试这样的事情:

public static void CallOnEach<T> (this IEnumerable<T> source, Action action)
{
    foreach (T element in source) {
        element.action();
    }
}

当然编译器不能知道'action'是T的一个方法,所以这不起作用:(也许有办法确保编译器的这个?像public static void CallOnEach<T> (this IEnumerable<T> source, Action action) where action isFunctionOf T

谢谢!

2 个答案:

答案 0 :(得分:2)

如果ElementMethod属于Action<T>类型,您现在可以使用您的扩展程序。它与类型static void的{​​{1}}方法相同:

T

但是没有办法让它更通用。如果没有引用它,就不能在元素上调用某些方法。

恕我直言:没什么大不了的。你只保存了几个字符。

public static void ElementMethod<T>(T parameter){}

//or

public static void ElementMethod(MyElement element){}

答案 1 :(得分:1)

您可以将ElementMethod作为扩展方法,然后就可以使用Latter