2012-07-28 2 views
2

Windows Phone 7 응용 프로그램에서 개체의 필드를 설정하는 데 문제가 있습니다 (소형 프레임 워크와 관련이 있으며 Windows에만 국한되지는 않습니다). 전화 7). 이 값은 struct 유형의 값 설정에만 해당됩니다.Windows Phone 7에서 개체에 구조체 형식의 필드를 설정하는 방법

// 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은 윈도우 폰 7에 존재하지 않는, 단순히 대상으로 아무것도하지 않는 SetValue를 사용 : 일반적으로 나는 다음과 같은 사용합니다. 리플렉션을 통해 WP33에서 struct 필드를 설정하는 다른 방법이 있습니까?

답변

1

구조체 상자에 SetValue, 및 unbox을 사용해야합니다. 매우 우아하지는 않지만 구조체가 일반적으로 읽기 전용이어야하는 또 다른 좋은 이유입니다. 현재 마지막 단계가 생략 된 것 같습니다 (상자를 캡처하지 않고 암시 적 상자를 사용하면 상자 값에 대한 변경이 삭제됩니다). 시각 :

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

는 더 일반적으로, 메타 프로그래밍 (CF)에 다소 약하다 이 작업을 많이 수행하는 경우 번으로 전체 .NET을 통해 메타 프로그래밍을 수행하고 CF 어셈블리를 검사 한 다음 필요한 기능을 캡슐화하는 CF 어셈블리를 생성하는 방법이 있습니다. 이 목적을 위해 IKVM.Reflection을 사용하여 성공했습니다 (.NET 리플렉션 을 수행 할 수 없습니다).

관련 문제