可能重复:
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
并将其返回。
如何写这个?
答案 0 :(得分:177)
这样的东西?
public static T ConvertValue<T>(string value)
{
return (T)Convert.ChangeType(value, typeof(T));
}
然后您可以像这样使用它:
int val = ConvertValue<int>("42");
修改强>
如果类型string
实现U
,您甚至可以更通用地执行此操作而不依赖于IConvertible
参数 - 这意味着您必须指定两个类型参数:
public static T ConvertValue<T,U>(U value) where U : IConvertible
{
return (T)Convert.ChangeType(value, typeof(T));
}
我考虑过捕捉InvalidCastException
可能引发的Convert.ChangeType()
异常 - 但在这种情况下你会得到什么? default(T)
?调用者处理异常似乎更合适。
答案 1 :(得分:9)
虽然可能不像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)
{}
}
答案 2 :(得分:-2)
ConvertValue(System.Object o),然后你可以通过o.GetType()结果分支出来并向上转换o来处理值。