2009-10-23 11 views
11

Estoy intentando crear un método genérico para lanzar un objeto, pero parece que no puede descifrar que el castaño. (Es viernes 15:00, ha sido una semana muy larga)método genérico tipo de fundición (.Net)

Ok, así que tengo este escenario:

// We have a value (which .net sets as a double by default) 
object obj = 1.0; 

// We have the target type as a string, which could be anything: 
// say string sometType = "System.Decimal" 
Type type = Type.GetType(someType); 

// I need a generic way of casting this 
object castedObj = (xxx) obj; 

¿Cómo puedo emitir ese objeto genéricamente sin crear un sin fin de if-else-staments?

+0

¿Quieres escribir echarlo a los del tipo representado por la variable de 'type' ? ¿Cómo declararías el castedObj? Es decir, ¿qué tipo le darías? No tiene sentido encasillamiento si lo guarda como un objeto de todos modos ... –

+0

no se puede convertir un int en caja a cualquier tipo de estructura que no sea int (o int?) (Ver http://blogs.msdn.com/ericlippert/archive/ 2009/03/19/representación-y-identity.aspx para más detalles.) Si necesita hacer esto, entonces es necesario utilizar algo más que un yeso. –

Respuesta

17

Puede usar el método Convert.ChangeType, si los tipos que utiliza implementan IConvertible (todos los tipos primitivos lo hacen).

Convert.ChangeType(value, targetType); 
3

Tenga una mirada en el método Convert.ChangeType, creo que va a satisfacer sus necesidades.

0

No puedes echarlo a un tipo que se especifique de forma dinámica.

Usted puede considerar el uso de generics lugar, pero necesitaría más código para ver cómo puede ayudar.

0

Usted puede hacer algo como los siguientes:

Type underlyingType = Type.GetType(someType); 


    if (underlyingType.IsGenericType && underlyingType.GetGenericTypeDefinition().Equals(typeof (Nullable<>))) 
    { 
     var converter = new NullableConverter(underlyingType); 
     underlyingType = converter.UnderlyingType; 
    } 

    // Try changing to Guid 
    if (underlyingType == typeof (Guid)) 
    { 
     return new Guid(value.ToString()); 
    } 
    return Convert.ChangeType(value, underlyingType); 

Felicitaciones a Monsters Go My.net para la función de tipo de cambio

Cuestiones relacionadas