最近、いくつかの 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
ありがとう!