«Объект не соответствует типу цели» при вызове универсального метода с отражением - PullRequest
0 голосов
/ 20 сентября 2018

Я искал несколько разных постов о подобной проблеме, но ни одна из них, похоже, не решила мою конкретную проблему (хотя я думаю, что они не могут быть далеко).

Ссылка ниже является ближайшей версией кмоя проблема

"Объект не соответствует типу цели" при вызове методов с использованием строки в C #

Единственная разница между моей проблемой и той, что в ссылке, заключается в том, что яя вызываю универсальный метод.

Когда я делаю свой вызов, я получаю ошибку «Объект не соответствует целевому типу», но типы, которые я могу сказать, определенно совпадают. Вот пример кода, для которого я воспроизвелмоя проблема.

Буду признателен за любую помощь

class Program
{
    static void Main(string[] args)
    {
        var obj = new SerializeObject();
        var serializer = new Serializer();


        var serialiserType = serializer.GetType();
        MethodInfo method = serialiserType.GetMethod("Deserialize");
        if (method == null)
        {
            return;
        }

        var t = obj.GetType();
        MethodInfo genericMethod = method.MakeGenericMethod(t);
        var tmp = genericMethod.Invoke(obj, new object[] { "Test" }); //error here
    }
}

public class Serializer
{
    public T Deserialize<T>(string value) where T : new()
    {
        return new T();
    }
}

public class SerializeObject
{

}

1 Ответ

0 голосов
/ 20 сентября 2018

В документации указано, что первый параметр obj должен быть экземпляром, для которого вы хотите вызвать отраженный метод:

obj Object

Объект, для которого вызывается метод или конструктор.Если метод статический, этот аргумент игнорируется.Если конструктор является статическим, этот аргумент должен быть нулевым или экземпляром класса, который определяет конструктор.

Поэтому я бы изменил вызов следующим образом:

var tmp = genericMethod.Invoke(serializer, new object[] { "Test" });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...