MissingMethodException调用带泛型参数的方法

时间:2014-12-05 12:51:42

标签: c# .net generics missingmethodexception

我有一个包含两个方法的类的库(以及其他一些不相关的方法):

public T Foo<T>()
{
    // Real version does some other things, but this is the gist.
    return (T)this.Foo();
}

public object Foo()
{
    // Do stuff and return something.
}

到目前为止一切顺利。这个库编译。

然而,在致电.Foo<string>()时,我得到了MissingMethodException。可能是什么导致了这个?一切都很好。

作为参考,没有泛型的Foo是遗留方法,我将介绍通用版本以帮助进行投射等。

1 个答案:

答案 0 :(得分:0)

我同意MissingMethodException是由旧dll引起的。但是,一旦你解决了这个问题,这仍然无法解决。您无法将对象隐式转换为字符串。在运行时,您的来电.Foo<string>()会调用(String)Foo(),其中Foo的类型为Object。除非您提供的T已经object,否则这基本上不会有效。

Read more about type conversions here, including an explanation of narrowing versus widening casting.

你试图用这段代码做什么?如果您希望始终使用.Foo<string>()或少数几种类型的子集,那么您可以为它们定义显式的强制转换。