4
我正在使用Reflection.Emit來爲飛行中的字段生成getters。到目前爲止,我的代碼適用於我測試過的所有情況,除非該字段未公開。當該字段未公開時,調用委託會拋出「System.NullReferenceException:未將對象引用設置爲對象的實例。」Reflection.Emit私人領域/財產訪問
我使用這個代碼來生成:(字段是字段信息)
DynamicMethod dm = new DynamicMethod(String.Concat ("_Set", field.Name, "_"), typeof(void),
new Type[] { typeof(object), typeof(object) },
field.DeclaringType, true);
ILGenerator generator = dm.GetILGenerator();
generator.Emit (OpCodes.Ldarg_0);
generator.Emit (OpCodes.Ldarg_1);
if (field.FieldType.IsValueType)
generator.Emit (OpCodes.Unbox_Any, field.FieldType);
generator.Emit (OpCodes.Stfld, field);
generator.Emit (OpCodes.Ret);
return (Action<object, object>)dm.CreateDelegate (typeof(Action<object, object>));
啊,這解決了我的問題。然而,它並沒有解決類似的問題,我認爲它與性質有關。我會爲此發佈一個新問題。謝謝。 – Nol 2012-07-21 07:10:04