Conversiones

28/11/2003 - 12:30 por Miguel Tubía | Informe spam
Hola a tod@s,
tego un problemilla que espero me sepan ayudar.
En una clase hay un momento que tengo un texto, introducido desde un
textbox, que puede representar una fecha, una cadena de texto, un entero
(short, byte, int, etc), un decimal, etc. En fin, cualquiera de los datos
que se puede meter en un textbox.
Ese textbox lo tengo que dar a una propiedad de una clase. Pero en tiempo de
diseño solo se el nombre de la propiedad. Por código le paso una referencia
de la clase a la que pertenece esa propiedad, donde quiero meter el valor, y
hago:
//linkaObject es el objeto
Type myType = linkaObject.GetType();
//LinkaProperty es la propiedad
PropertyInfo myPropertyInfo = myType.GetProperty(LinkaProperty);

luego le pongo el valor así:
//Valor es el string donde guardo el valor
myPropertyInfo.SetValue(this.linkaObject,valor, null)

Si la propiedad es una cadena funciona bien, pero claro, si es un número por
ejemplo, casca al hacer la conversión.
Con myPropertyInfo.PropertyType sabemos el tipo de la propiedad. Había
pensado hacer una variable object, algo así:

Object o;
o =Activator.CreateInstance(myPropertyInfo.PropertyType);
o=valor; //ESTA MAL, LO SÉ!!! :) (tamarlo como pseudocodigo)
myPropertyInfo.SetValue(this.linkaObject,o, null);

Por encima. La cuestion es la de antes, me temo. ¿Se puede pasar el valor
al tipo de la propiedad? Como todos los tipos tienen un método Parse q
admite un string, había pensado hacer algo como siguiente:
o=myPropertyInfo.PropertyType.InvokeMember("Parse", etcetcetc);
pasándole como parámetro el valor y me devuelve un tipo del que quiero. Pero
no funciona. ¿Alguien me puede ayudar? ¿He explicado bien lo que quiero? Es
q si me lio hasta yo explicandolo...
Muchas gracias por adelantado
Un saludo a tod@s
 

Leer las respuestas

#1 Miguel Tubía
28/11/2003 - 13:26 | Informe spam
Hola de nuevo,
me respondo un poco. He seguido haciendo algo y con esto:

object o =Activator.CreateInstance(myPropertyInfo.PropertyType);
myPropertyInfo.PropertyType.InvokeMember("Parse", BindingFlags.Public |
BindingFlags.InvokeMethod | BindingFlags.Static, null, o, new Object[]
{valor});
myPropertyInfo.SetValue(this.linkaObject,o, null);

no me casca, pero 'o' vale siempre 0. como si no cogiera el valor
¿Alguna idea pq no coge el valor?
Un saludo

Preguntas similares