所以,一个相当常见的 IEnumerable 扩展方法,运行:
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 方法。因此,为 Run 添加一个使用 Func 而不是 Action 的重载:
public static IEnumerable<T> Run<T>(this IEnumerable<T> source, Func<T, T> action)
{
return source.Select(action).ToList().AsEnumerable();
}
现在编译器抱怨“以下方法之间的调用不明确......”
所以我的问题是,当 Run 方法的 Action 重载对方法组无效时,它怎么会导致歧义?