したがって、IEnumerable のかなり一般的な拡張メソッドである Run:
public static IEnumerable<T> Run<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
action(item);
yield return item;
}
}
たとえば、DbSet.Add でそれを使用しようとすると:
invoice.Items.Run(db.InvoiceItems.Add);
// NB: Add method signature is
// public T Add(T item) { ... }
...コンパイラは、voidメソッドを期待しているため、戻り値の型が間違っていると不平を言います。したがって、Action の代わりに Func を取る Run のオーバーロードを追加します。
public static IEnumerable<T> Run<T>(this IEnumerable<T> source, Func<T, T> action)
{
return source.Select(action).ToList().AsEnumerable();
}
そして今、コンパイラは「呼び出しは次のメソッド間であいまいです...」と不平を言います...
私の質問は、Run メソッドの Action オーバーロードがメソッド グループに対して有効でない場合、どのようにあいまいさを引き起こすのでしょうか?