如何使一个genericstypes转换函数

可能重复:
有没有一个通用的Parse()函数,将string转换为任何types使用parsing?

我想做一个通用的function来做一些操作,比如:

ConvertValue<T>(string value) 

如果Tint那么函数会将该值转换为int并返回结果。

同样,如果Tboolean ,函数将把value转换为boolean并返回。

如何写这个?

像这样的东西?

 public static T ConvertValue<T>(string value) { return (T)Convert.ChangeType(value, typeof(T)); } 

你可以像这样使用它:

 int val = ConvertValue<int>("42"); 

编辑:

你甚至可以做到这一点更通用的,不要依赖string参数,只要typesU实现IConvertible – 这意味着你必须指定两个types参数:

 public static T ConvertValue<T,U>(U value) where U : IConvertible { return (T)Convert.ChangeType(value, typeof(T)); } 

我考虑捕获可能由Convert.ChangeType()引发的InvalidCastExceptionexception – 但是在这种情况下你会返回什么? default(T) ? 让调用者处理exception似乎更合适。

虽然可能不像IConvertible方法那么干净,但是你总是可以使用简单的检查typestypeof(T)来返回一个T

 public static T ReturnType<T>(string stringValue) { if (typeof(T) == typeof(int)) return (T)(object)1; else if (typeof(T) == typeof(FooBar)) return (T)(object)new FooBar(stringValue); else return default(T); } public class FooBar { public FooBar(string something) {} } 

ConvertValue(System.Object o),那么你可以通过o.GetType()结果分支出来,向上转换o来处理值。