Pregunta

Tengo problemas para configurar un campo en un objeto en una aplicación de Windows Phone 7 (sospecho que está relacionado con el marco compacto y no es específico de Windows Phone 7).Creo que esto es específico para establecer valores que son de struct tipos.Normalmente uso lo siguiente:

// fieldName is the name of the field I'm interested in setting
FieldInfo fieldInfo = target.GetType().GetField(fieldName);

// target is the object I'm setting the value on
// value is the value that I am setting
fieldInfo.SetValueDirect(__makeref(target), value);

Desafortunadamente SetValueDirect no existe en Windows Phone 7, y simplemente usando SetValue no hace nada para apuntar.¿Existe una forma alternativa de configurar struct ¿Campos en WP7 a través de la reflexión?

¿Fue útil?

Solución

Tendrías que encuadrar la estructura, usar SetValue, y desembalar.No es muy elegante, pero es otra buena razón por la que las estructuras generalmente deberían ser de solo lectura.Actualmente, presumiblemente está omitiendo el último paso (al usar un cuadro implícito sin capturar el cuadro, el cambio al valor del cuadro se descarta).Visualmente:

MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;

En términos más generales, la metaprogramación es bastante débil en la FQ.Si estás haciendo mucho de esto, hay formas de hacer la metaprogramación. por adelantado a través de .NET completo, inspeccionando un ensamblaje CF y generando un ensamblaje CF que encapsule la funcionalidad que necesita.He tenido éxito usando IKVM.Reflection para este propósito (la reflexión .NET incorporada no puedo hacer esto).

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top