在通用中如何将一种类型数据转换为另一种类型数据

时间:2017-02-10 10:01:34

标签: c# generics

使用C#,在泛型中,因为不使用值类型(如int),想要一个所有数据类型的扩展方法,如:int,long,string.conversion方法是下面的

public static T Translate<T>(this T inputNumber) where T : class
{
    return inputNumber.ToString()
        .Replace("1", "1")
        .Replace("2", "2")
        .Replace("3", "3")
        .Replace("4", "4")
        .Replace("5", "5")
        .Replace("6", "6")
        .Replace("7", "7")
        .Replace("8", "8")
        .Replace("9", "9")
        .Replace("0", "0") as T;
}    

var result= 2.Translate<longTypeData>(); 

在结果变量中需要类型数据。

1 个答案:

答案 0 :(得分:0)

目前还不是很清楚你要做什么。但是如果你想让这个函数用作某种转换器,我会在:

中传递两个泛型类型的参数
public static T Translate<Q, T>(this Q inputNumber) {
    string value = TypeDescriptor.GetConverter(typeof(Q)).ConvertToString(inputNumber);

    string replacedValue = value.ToString()
        .Replace("1", "1")
        .Replace("2", "2")
        .Replace("3", "3")
        .Replace("4", "4")
        .Replace("5", "5")
        .Replace("6", "6")
        .Replace("7", "7")
        .Replace("8", "8")
        .Replace("9", "9")
        .Replace("0", "0");

    return (T)TypeDescriptor.GetConverter(typeof(T)).ConvertFromString(replacedValue);
}

稍后您可以像这样使用它:

int result = "444".Translate<string, int>();

但请记住:传递无效的类型组合会产生异常!