如何生成泛型类型强制转换函数

本文关键字:转换 函数 何生成 泛型类型 | 更新日期: 2023-09-27 18:03:56

可能重复:
有没有一个通用的Parse((函数可以使用Parse将字符串转换为任何类型?

我想做一个通用函数来做一些操作,比如:

ConvertValue<T>(string value)

如果Tint,则函数将把值转换为int并返回结果。

类似地,如果Tboolean,则函数会将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到类型来处理该值。