2013-10-26 4 views
0

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

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

Background: Метод десериализации используется для анализа данных html. Это похоже на собственный метод myJson.myDeserialize, используемый на веб-сайте, который не имеет API.

+0

Если вам нужно возвратить '' List почему бы не отметить тип возвращаемого '' Список ? –

+0

Ну, что бы вы хотели, чтобы содержимое списка было, если 'T' есть' List '? –

+2

У этого вопроса есть тег * абстракция *, но я думаю, что он должен быть помечен * leaky abstraction * – GolfWolf

ответ

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