Hola!
despues de mucho tiempo resistiendome (al final microsoft siempre acaba podiendo conmigo >.< ) he decidido aprender c# y portar algunos jueguecitos viejos a c# para aprender.
Normalmente en C usaba un formato de fichero parecido al XML que ya tengo implementado el lector/escritor, y ahora solo me falta la funcion para meter todos los datos en su sitio. Por poner un ejemplo en C, yo tenia esta estructura
struct MyStruct
{
float x;
float y;
int position;
};
A traves de una herramienta me generaba estos datos:
KmlLoadStruct dataToLoad[]= {
{"posX",offsetof (MyStruct,posX), TYPE_FLOAT},
{"posY",offsetof (MyStruct,posY), TYPE_FLOAT},
{"position",offsetof (MyStruct,position),TYPE_INTEGER}
};
La instruccion offsetof es una instruccion un poco oscura del C que te dice el offset de una variable dentro de un objeto. De esta forma, tenia una funcion de 'loadObject' (muy simplificada en el ejemplo) que consistia en
void loadObject (KmlLoadStruct *dataToLoad, uchar *objectToLoad)
{
if (dataType==TYPE_INTEGER) *(int *)(objectToLoad + dataOffset) = readIntValue("variableName");
if (dataType==TYPE_FLOAT) *(float *)(objectToLoad + dataOffset) = readFloatValue("variableName");
bla bla bla
(esto para todos los elementos del array)
}
con la que automaticamente a partir de la definicion de una estructura, podia guardar y leer un objeto sin muchos dolores de cabeza.
Cual seria la forma correcta de hacer algo parecido a esto en c#? Porque que obviamente el offsetof no debe existir...
p.d. No puedo pasar los a XML, mi religion me lo impide ^_^
Si puedes usar XML (no entiendo lo que pones al final), lo suyo es que uses para leer y escribir la serialización en XML (http://msdn.microsoft.com/en-us/library/system.xml.serialization.xmlserializer.aspx).
Si no quieres usar serialización, lo que hacías antes lo puedes seguir haciendo (más o menos) usando la clase System.Type a golpe de llamadas a GetProperty para obtener las propiedades y luego SetValue para asignarlas.
Un saludo!
Vicente
gracias, voy a ver que puedo sacar de eso :)