Question

J'ai du mal à définir un champ sur un objet dans une application Windows Phone 7 (je soupçonne que cela est lié au framework compact et non spécifique à Windows Phone 7).Je pense que cela est spécifique à la définition de valeurs qui sont de struct les types.Normalement, j'utilise ce qui suit :

// 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);

Malheureusement SetValueDirect n'existe pas sur Windows Phone 7, et simplement en utilisant SetValue ne fait rien pour cibler.Existe-t-il une autre façon de définir struct champs sur WP7 par réflexion ?

Était-ce utile?

La solution

Vous devrez encadrer la structure, utiliser SetValue, et déballer.Pas très élégant, mais une autre bonne raison pour laquelle les structures doivent généralement être en lecture seule.Actuellement, vous omettez probablement la dernière étape (en utilisant une boîte implicite sans capturer la boîte, votre modification de la valeur encadrée est ignorée).Visuellement:

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

Plus généralement, la méta-programmation est plutôt faible sur la CF.Si vous faites beaucoup de choses, il existe des moyens de faire de la méta-programmation à l'avance via .NET complet, inspectez un assemblage CF et générez un assemblage CF qui encapsule les fonctionnalités dont vous avez besoin.J'ai réussi à utiliser IKVM.Reflection à cette fin (la réflexion .NET intégrée ne peut pas fais ça).

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top