2017-02-10 66 views
-2

在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>(); 

希望结果变量类型的数据。

+0

@TimSchmelter他们似乎是不同的Unicode字符 –

+0

@RenéVogt,你是对的。 – shamim

+0

我不认为这是可能的,因为如果没有'class'约束,你不能使用'as T'。 – Kamo

回答

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>(); 

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

+0

,感谢您提供宝贵的信息,我在评论中告诉您这个解决方案。谢谢。 – shamim

相关问题