0

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

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没有泛型是遗留方法,我正在介绍泛型版本以帮助进行转换等。

4

1 回答 1

0

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

在此处阅读有关类型转换的更多信息,包括对缩小与扩大转换的解释。

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

于 2014-12-05T22:08:20.013 回答