Como definir um campo do tipo struct em um objeto no Windows Phone 7
-
13-12-2019 - |
Pergunta
Estou tendo problemas para definir um campo em um objeto em um aplicativo do Windows Phone 7 (suspeito que esteja relacionado à estrutura compacta e não específico do Windows Phone 7).Acredito que isso seja específico para definir valores que são de struct
tipos.Normalmente eu uso o seguinte:
// 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);
Infelizmente SetValueDirect
não existe no Windows Phone 7, e simplesmente usando SetValue
não faz nada para atingir o alvo.Existe uma maneira alternativa de definir struct
campos no WP7 por meio de reflexão?
Solução
Você teria que encaixotar a estrutura, usar SetValue, e desempacotar.Não é muito elegante, mas é outro bom motivo para que as estruturas geralmente sejam somente leitura.Atualmente você provavelmente está omitindo a última etapa (ao usar uma caixa implícita sem capturar a caixa, sua alteração no valor da caixa será descartada).Visualmente:
MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;
De forma mais geral, a metaprogramação é bastante fraca em FC.Se você está fazendo muito isso, existem maneiras de fazer a metaprogramação antecipadamente via .NET completo, inspecionando um assembly CF e gerando um assembly CF que encapsula a funcionalidade necessária.Tive sucesso usando IKVM.Reflection para essa finalidade (a reflexão .NET embutida não pode fazem isto).