如何使一个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()
引发的InvalidCastException
exception – 但是在这种情况下你会返回什么? 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来处理值。