2014-02-16 3 views
4

У меня есть метод, который должен преобразовать строку универсального типа:Преобразовать строку T

T GetValue<T>(string name) 
{ 
    string item = getstuff(name); 
    return item converted to T // ???????? 
} 

T может быть ИНТ или дату.

+1

Если 'T' может быть * только *' int' или 'DateTime', не используют дженерики. Если 'T' могут быть и другими типами, см. [Сериализация] (http://msdn.microsoft.com/en-us/library/7ay27kt9 (v = vs.110) .aspx). –

+0

'return (T) Convert.ChangeType (item, typeof (T));' – Damith

+0

См., Если [Convert.ChangeType (obj, type)] (http://msdn.microsoft.com/en-us/library/ dtb69x08% 28v = vs.110% 29.aspx) подходит для ваших нужд. – slugster

ответ

11

вы можете использовать Convert.ChangeType

T GetValue<T>(string name) 
{ 
    string item = getstuff(name); 
    return (T)Convert.ChangeType(item, typeof(T)); 
} 

, если вам нужно ограничить типы входных данных только для междунар и DateTime, добавьте условие, как ниже

if (typeof(T) != typeof(int) && typeof(T) != typeof(DateTime)) 
{ 
    // do something with other types 
} 
+1

Он отлично работал, преобразуя строку в дату или int в зависимости от того, что было. Спасибо –

+0

Плохая идея. Что значит остановить Т-другой тип? Существует слишком много, что может пойти не так с этим кодом. – jmcilhinney

Смежные вопросы