因此,IEnumerable的一个相当常见的扩展方法,运行:
public static IEnumerable<T> Run<T>(this IEnumerable<T> source, Action<T> action)
{
foreach (var item in source)
{
action(item);
yield return item;
}
}
Run Code Online (Sandbox Code Playgroud)
当我尝试使用它时,例如,DbSet.Add:
invoice.Items.Run(db.InvoiceItems.Add);
// NB: Add method signature is
// public T Add(T item) { ... }
Run Code Online (Sandbox Code Playgroud)
...编译器抱怨它有错误的返回类型,因为它期望一个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 Code Online (Sandbox Code Playgroud)
现在编译器抱怨"以下方法之间的调用是模糊的......"
所以我的问题是,当Run方法的Action重载对方法组无效时,怎么会导致歧义?