كيفية تعيين حقل من نوع البنية على كائن في Windows Phone 7
-
13-12-2019 - |
سؤال
أواجه مشكلة في تعيين حقل على كائن في تطبيق 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
لا يفعل أي شيء لاستهداف.هل هناك طريقة بديلة لتعيين struct
الحقول على WP7 من خلال التفكير؟
المحلول
سيكون عليك وضع البنية في مربع، واستخدام SetValue، وفتح الصندوق.ليس أنيقًا جدًا، ولكن هناك سبب وجيه آخر وهو أن الهياكل يجب أن تكون للقراءة فقط بشكل عام.من المفترض حاليًا أنك تحذف الخطوة الأخيرة (باستخدام مربع ضمني دون التقاط المربع، يتم تجاهل التغيير الذي أجريته على القيمة المعبأة).بصريا:
MyStruct val = ...
object boxedVal = val;
fieldInfo.SetValue(boxedVal, newValue);
val = (MyStruct)boxedVal;
بشكل عام، البرمجة الوصفية ضعيفة إلى حد ما فيما يتعلق بالتليف الكيسي.إذا كنت تفعل الكثير من هذا، فهناك طرق للقيام بالبرمجة التعريفية مقدماً عبر .NET الكامل، وفحص مجموعة CF وإنشاء مجموعة CF التي تحتوي على الوظائف التي تحتاجها.لقد نجحت في استخدام IKVM.Reflection لهذا الغرض (انعكاس .NET المدمج لا تستطيع افعل هذا).