2011-01-11 14 views
5

私は、次の場合に動作するようにキャストすることができ、数値タイプのための具体的な制約がありますかどうかを知りたい:数値ジェネリック型に数値の具体的なタイプの変換

class MyClass<T> 
{ 

... 

void MyMethod() 
{ 
    .... 
    byte value = AnotherObject.GetValue() 

    Tvalue = (T)value; 
    .... 
} 

... 

} 

私のようなボクシングとアンボクシングを試してみました:

Tvalue = (T)(object)value; 

しかしT == byte場合にのみ機能します。それ以外の場合はInvalidCastExceptionとなります。

Tは常に数値型(short、floatなど)です。

+0

あなたの目的は何ですか? 'Converter'を使用できますか? – Gabe

答えて

10

はい、値を同じタイプにのみアンボックスすることができます。

あなたは

Tvalue = (T) Convert.ChangeType(value, typeof(T)); 

を使用してみましたか?ここにサンプルがあります:あなたが最初のパスとして

where T : struct, IComparable<T> 

を指定することもできますが、

using System; 

class Test 
{ 
    static void Main() 
    { 
     TestChange<int>(); 
     TestChange<float>(); 
     TestChange<decimal>(); 
    } 

    static void TestChange<T>() 
    { 
     byte b = 10; 
     T t = (T) Convert.ChangeType(b, typeof(T)); 
     Console.WriteLine("10 as a {0}: {1}", typeof(T), t); 
    } 
} 

は、ここには制約はありません。この制約は、コンバージョンには関係ありません。発信者が不適切なタイプを使用しないようにすることができます。

関連する問題