Как вернуть T, когда я знаю класс, который скрыт за ним?

Я знаю, что Т List<string> (или же List<MyClass>). Как должно выглядеть отражение или что-то, что позволяет мне возвращать этот список строк?

public T Deserialize<T>(string response)
{
    //just example
    string[] words = response.Split(' ');
    List<string> wordsList = words.ToList();
    //?
    return wordsList;
}

Справочная информация: метод десериализации используется для анализа данных HTML. Это что-то вроде собственного метода myJson.myDeserialize, используемого на веб-сайте, который не имеет API.

1 ответ

Решение

Для этого есть неловкий трюк: сначала нужно привести свой экземпляр к object,

public T Deserialize<T>(string response)
{
    string[] words = response.Split(' ');
    List<string> wordsList = words.ToList();

    return (T)(object)wordsList;
}

Это предполагает, что ваш абонент указывает List<string> как универсальный тип.

var x = Deserialize<List<string>>("hello world");    // gives "hello", "world"
var y = Deserialize<int>("hello world");             // throws InvalidCastException
Другие вопросы по тегам