-4

我有一个扩展方法,可以将一组项目分成更小的子集:

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).)。

我无法复制它,也许在你的帮助下,我可能......

4

1 回答 1

4

您是否注意到您的方法返回 a IEnumerable<IEnumerable<T>,但错误消息是在谈论返回 a 的方法List<List<T>>

如果我不得不猜测,我会说您在某个时候更改了扩展方法的返回类型。然后,您只替换了包含您的扩展方法的 DLL,而现在其他一些依赖的 DLL 正试图像以前一样调用您的扩展方法……但它当然不再存在。

您必须重新编译和重新部署所有引用/调用您的扩展方法的程序集。

PS:无论您是通过MyClass.chunk(myEnumerable, 500)还是通过调用扩展方法myEnumerable.chunk(200)都没有任何区别;后者调用扩展方法的方式是前者的语法快捷方式,C# 编译器会自动将扩展方法调用转换为静态方法调用。

于 2014-12-15T10:27:05.427 回答