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