Как вернуть 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