如何生成泛型类型强制转换函数
本文关键字:转换 函数 何生成 泛型类型 | 更新日期: 2023-09-27 18:03:56
可能重复:
有没有一个通用的Parse((函数可以使用Parse将字符串转换为任何类型?
我想做一个通用函数来做一些操作,比如:
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");
编辑:
如果类型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)
?让调用者处理异常似乎更合适。
虽然可能不像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)
{}
}
ConvertValue(System.Object o(,然后您可以通过o.GetType((结果进行分支,并向上转换o到类型来处理该值。