2017-02-10 117 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

相關問題