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?

Foi útil?

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).

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top