我有一个扩展方法,可以将一组项目拆分为更小的子集:
static class MyClass {
/// <summary>
/// Breaks a list of items into chunks of a specific size
/// </summary>
public static IEnumerable<IEnumerable<T>> chunk<T>(this IEnumerable<T> source, int chunksize)
{
while (source.Any())
{
yield return source.Take(chunksize);
source = source.Skip(chunksize);
}
}
}
现在我可以通过
调用此方法MyClass.chunk(myEnumerable, 500)
,或使用myEnumerable.chunk(200)
右?但是当我使用静态(第一个)呼叫时,我的一个客户抱怨MissingMethodException
:
System.MissingMethodException
:未找到方法:System.Collections.Generic.List´1<System.Collections.Generic.List´1<!!0>> MyClass.chunk(System.Collections.Generic.IEnumerable´1<!!0>, Int32)
。)。
我无法重现它,也许在你的帮助下我可能......
答案 0 :(得分:4)
您是否注意到您的方法返回IEnumerable<IEnumerable<T>
,但错误消息是在讨论返回List<List<T>>
的方法?
如果我不得不猜测,我说你已经在某个时候更改了扩展方法的返回类型。然后,您只替换了包含扩展方法的DLL,现在其他一些依赖DLL试图像以前一样调用您的扩展方法......但它当然不再存在。
你必须重新编译&amp;重新部署引用/调用扩展方法的所有程序集。
P.S。:无论您是通过MyClass.chunk(myEnumerable, 500)
还是myEnumerable.chunk(200)
调用您的扩展方法,都没有任何区别;后一种调用扩展方法的方式是前者的语法快捷方式,C#编译器会自动将扩展方法调用转换为它真正的静态方法调用。