Как установить поле типа структуры на объекте в Windows Phone 7

StackOverflow https://stackoverflow.com//questions/11698172

Вопрос

У меня проблемы с настройкой поля на объекте в приложении Windows Phone 7 (я подозреваю, что он связан с компактной структурой, а не специфично для Windows Phone 7).Я считаю, что это специфично для установления значений, которые имеют типы struct.Обычно я использую следующее:

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

К сожалению, SetValueDirect не существует на Windows Phone 7, и просто используя SetValue не делает ничего для цели.Есть ли альтернативный способ установить полякодицетагкод полей на WP7 через отражение?

Это было полезно?

Решение

Вы должны были бы вставить структуру, использовать setValue, и Unbox .Не очень элегантно, но еще одна веская причина, по которой структуры, как правило, должны быть только для чтения.В настоящее время вы предположительно пропускаете последний шаг (с помощью неявного блока без захвата коробки вы можете отбрасывать ваше изменение в боксельное значение).Визуально:

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

В целом, мета-программирование довольно слабое на CF.Если вы делаете много этого, есть способы выполнять мета-программирование заранее через Full .NET, осматривая монтажу CF и созданию узла CF, которая инкапсулирует функциональность, которые вам нужны.У меня был успех, используя IKVM.reflection для этой цели (встроенное отражение .Net не может сделать это).

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top