2011-01-11 22 views
5

me gustaría saber si hay una limitación específica para los tipos numéricos que permite la fundición a trabajar en el siguiente caso:La conversión de tipo inmediato numérica para numérica tipo genérico

class MyClass<T> 
{ 

... 

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

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

... 

} 

Probé el boxeo y unboxing como:

Tvalue = (T)(object)value; 

Pero esto solo funciona si T == byte. De lo contrario, obtengo un InvalidCastException.

T siempre es un tipo de número (como short, float, etc.).

+0

¿Cuál es su propósito? ¿Puedes usar 'Convertidor'? – Gabe

Respuesta

10

Sí, solo puede desagrupar un valor del mismo tipo.

¿Ha intentado utilizar

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

? He aquí una muestra:

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

No hay limitación aquí, aunque se podría especificar

where T : struct, IComparable<T> 

como un primer paso. Sin embargo, esa restricción no tiene nada que ver con el funcionamiento de la conversión, sino que simplemente intentará evitar que las personas que llaman utilicen un tipo inapropiado.

Cuestiones relacionadas