0

私は2つのメソッド(および関連しない他のいくつか)を持つクラスを含むライブラリを持っています:

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 に答える