visual tipos tipo studio puede programacion implícitamente datos convertir convert conversion .net reflection runtime type-conversion

.net - studio - tipos de datos en c# pdf



¿Cómo puedo convertir tipos en tiempo de ejecución? (3)

Mi escenario debería ser simple ... el tipo del que quiero convertir FROM es SIEMPRE ''string''. Lo que quiero convertir ... podría ser muchas cosas: Ints, DateTimes, ... cadenas, etc.

Esto sería fácil:

string valueToConvertFrom = "123"; int blah = Convert.ToInt32(valueToConvertFrom);

Sin embargo ... No sé (hasta el tiempo de ejecución) que el valor que necesito para convertir es un ''Int'' (o lo que sea). He intentado esto:

string valueToConvertFrom = "123"; Type convertToType = typeof(int); object blah = Convert.ChangeType(valueToConvertFrom, convertToType);

Pero eso me da el siguiente error: "Object debe implementar IConvertible".

No quiero tener que hacer una declaración de cambio y llamar "Convert.ToBlah" en función del nombre del tipo ... ¿Alguna sugerencia?


La clase String implementa IConvertible, este código simplemente DEBERÍA funcionar. ¿Qué versión de .NET estás apuntando?

object o = Convert.ChangeType( str, convertToType );

Además, la mayoría de los tipos que mencionas implementan el método Parse, así que tu mejor opción podría ser algo como esto.

Type convertToType = ...; MethodInfo mi = convertToType.GetMethod("Parse", BindingFlags.Static); object blah; if(mi != null) { blah = mi.Invoke(null, new object[]{valueToConvertFrom}); } else { // the type doesn''t implement the Parse method, handle it another way :/ }


La pregunta de Timothy, tal como se aplica en general a la cuestión de la conversión de tipos en .NET, es un tema muy importante. Si bien las estrategias de conversión son un tanto sencillas en escenarios específicos con tipos conocidos, desafortunadamente no existe una estrategia generalizada en ninguna implementación de .NET para lograr la conversión de Tipo en tiempo de ejecución de un Tipo arbitrario a otro, ni dicha estrategia será provista por Redmond. Sin embargo, Microsoft proporciona algunas buenas pautas para el concepto general de conversión de tipos, que incluyen:

He tenido que lidiar con el mismo problema general en mis sistemas, y como solución he consolidado todas las estrategias estándar en un solo método. El alcance de este tema es amplio y las estrategias de conversión relacionadas son variadas, por lo que este enfoque consolidado solo puede ser cubierto en un artículo técnico completo. Sin embargo, ofrezco aquí una copia de la documentación de mi método con la esperanza de que esto lo ayude a comprender los requisitos generales que deberá abordar si desea desarrollar una solución similar y generalizada. Aquí está el enlace a mi documentación:

Espero que esto te ayude,

marca


la manera más limpia de hacerlo es utilizando un TypeConverter. puede obtener una instancia de un convertidor de tipo llamando al TypeDescriptor.GetConverter y luego usando la instancia del convertidor de tipo para hacer la conversión. algo así:

string valueToConvertFrom = "123"; Type convertToType = typeof(int); TypeConverter tc = TypeDescriptor.GetConverter(convertToType); object blah =tc.ConvertFromString(valueToConvertFrom);