2017-02-10 9 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彼らは異なったユニコード文字のようです。 –

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

しかし、心に留めておくあなたは、この関数は、コンバータのいくつかの種類として使用する場合でも、私は中2つのジェネリック型引数を渡します。 無効な型の組み合わせを渡すと例外が生成されます。

+0

あなたの貴重な情報をお寄せいただき、ありがとうございます。 – shamim

関連する問題