将字符串转换为泛型类型 c#(将字符串转换为 T)

5
我有一个方法需要将一个字符串转换为通用类型:
T GetValue<T>(string name)
{
   string item = getstuff(name);
   return item converted to T   // ????????
}

T可以是整数或日期。


1
如果 T 只能是 intDateTime,请不要使用泛型。如果 T 还可以是其他类型,请参考序列化 - p.s.w.g
return (T)Convert.ChangeType(item, typeof(T)); - Damith
请查看Convert.ChangeType(obj, type)方法是否符合您的需求。 - slugster
我必须承认,那是一种糟糕的通用方法使用方式。你应该为int和DateTime分别编写一个单独的方法。虽然你可以让它工作,但这绝对不意味着你应该这样做。 - jmcilhinney
1个回答

14

你可以使用Convert.ChangeType函数。

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

如果您需要仅限于 int 和 DateTime 类型的输入,请添加以下条件:
if (typeof(T) != typeof(int) && typeof(T) != typeof(DateTime))
{
     // do something with other types 
}

1
它完美地将字符串转换为日期或整数,具体取决于T的类型。谢谢。 - Ian Vink
坏主意。有什么能阻止T成为其他类型?这段代码可能会出现太多问题。 - jmcilhinney

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接