如何使一个genericstypes转换函数
可能重复:
有没有一个通用的Parse()函数,将string转换为任何types使用parsing?
我想做一个通用的function来做一些操作,比如:
ConvertValue<T>(string value)
如果T是int那么函数会将该值转换为int并返回结果。
同样,如果T是boolean ,函数将把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来处理值。