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 ответ

Решение

Я согласен, что MissingMethodException происходит из-за старых библиотек. Однако, как только вы это исправите, это все равно не будет работать. Вы не можете неявно привести объект к строке. Во время выполнения ваш звонок .Foo<string>() позвоню (String)Foo(), где Foo имеет тип Object, Это в принципе никогда не сработает, если вы не предоставите T object,

Узнайте больше о преобразованиях типов здесь, в том числе объяснение сужения или расширения приведения.

Что вы пытаетесь сделать с этим фрагментом кода? Если вы ожидаете всегда использовать .Foo<string>() или подмножество нескольких типов, тогда вы можете просто определить явное приведение для них.

Другие вопросы по тегам