我最近一直在玩一些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
谢谢!
答案 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