可能重复:
is there a generic Parse() function that will convert a string to any type using parse?
我想做一个泛型函数来做一些操作,比如:
ConvertValue<T>(string value)
如果T
为int
,则函数会将值转换为int
并返回结果。
类似地,如果T
为boolean
,该函数会将value
转换为boolean
并返回它。
该怎么写呢?
发布于 2011-07-31 01:06:26
像这样的东西?
public static T ConvertValue<T>(string value)
{
return (T)Convert.ChangeType(value, typeof(T));
}
然后您可以像这样使用它:
int val = ConvertValue<int>("42");
编辑:
如果类型U
实现了IConvertible
,您甚至可以执行更通用的操作,而不依赖于string
参数-这意味着您必须指定两个类型参数:
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}
我考虑过捕捉Convert.ChangeType()
可能引发的InvalidCastException
异常--但是在这种情况下,你会返回什么呢?default(T)
?让调用者处理异常似乎更合适。
发布于 2011-07-31 02:26:42
虽然看起来可能不如IConvertible
方法整洁,但您始终可以使用简单的检查typeof(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)
{}
}
发布于 2011-07-31 01:06:43
ConvertValue( System.Object o ),然后您可以根据o.GetType()结果进行分支,并将o向上强制转换为要使用该值的类型。
https://stackoverflow.com/questions/6884653
复制相似问题