@@ -43,22 +43,24 @@ public PropertyGetter(Type targetType, PropertyInfo property)
4343 if ( getMethod . DeclaringType ! . IsValueType )
4444 {
4545 // Create a delegate (ref TDeclaringType) -> TValue
46- var propertyGetterAsFunc =
47- getMethod . CreateDelegate ( typeof ( ByRefFunc < , > ) . MakeGenericType ( targetType , property . PropertyType ) ) ;
48- var callPropertyGetterClosedGenericMethod =
49- CallPropertyGetterByReferenceOpenGenericMethod . MakeGenericMethod ( targetType , property . PropertyType ) ;
50- _GetterDelegate = ( Func < object , object ? > )
51- callPropertyGetterClosedGenericMethod . CreateDelegate ( typeof ( Func < object , object ? > ) , propertyGetterAsFunc ) ;
46+ var delegateType = typeof ( ByRefFunc < , > ) . MakeGenericType ( targetType , property . PropertyType ) ;
47+ var propertyGetterDelegate = getMethod . CreateDelegate ( delegateType ) ;
48+ var wrapperDelegateMethod = CallPropertyGetterByReferenceOpenGenericMethod . MakeGenericMethod ( targetType , property . PropertyType ) ;
49+ var accessorDelegate = wrapperDelegateMethod . CreateDelegate (
50+ typeof ( Func < object , object ? > ) ,
51+ propertyGetterDelegate ) ;
52+ _GetterDelegate = ( Func < object , object ? > ) accessorDelegate ;
5253 }
5354 else
5455 {
5556 // Create a delegate TDeclaringType -> TValue
56- var propertyGetterAsFunc =
57- getMethod . CreateDelegate ( typeof ( Func < , > ) . MakeGenericType ( targetType , property . PropertyType ) ) ;
58- var callPropertyGetterClosedGenericMethod =
59- CallPropertyGetterOpenGenericMethod . MakeGenericMethod ( targetType , property . PropertyType ) ;
60- _GetterDelegate = ( Func < object , object ? > )
61- callPropertyGetterClosedGenericMethod . CreateDelegate ( typeof ( Func < object , object ? > ) , propertyGetterAsFunc ) ;
57+ var delegateType = typeof ( Func < , > ) . MakeGenericType ( targetType , property . PropertyType ) ;
58+ var propertyGetterDelegate = getMethod . CreateDelegate ( delegateType ) ;
59+ var wrapperDelegateMethod = CallPropertyGetterOpenGenericMethod . MakeGenericMethod ( targetType , property . PropertyType ) ;
60+ var accessorDelegate = wrapperDelegateMethod . CreateDelegate (
61+ typeof ( Func < object , object ? > ) ,
62+ propertyGetterDelegate ) ;
63+ _GetterDelegate = ( Func < object , object ? > ) accessorDelegate ;
6264 }
6365 }
6466 else
@@ -69,20 +71,26 @@ public PropertyGetter(Type targetType, PropertyInfo property)
6971
7072 public object ? GetValue ( object target ) => _GetterDelegate ( target ) ;
7173
72- private static TValue CallPropertyGetter < TTarget , TValue > (
74+ private static object ? CallPropertyGetter < TTarget , TValue > (
7375 Func < TTarget , TValue > Getter ,
7476 object target )
7577 where TTarget : notnull
7678 {
77- return Getter ( ( TTarget ) target ) ;
79+ Console . WriteLine ( $ "CallPropertyGetter called: TTarget={ typeof ( TTarget ) } , TValue={ typeof ( TValue ) } , target={ target } ") ;
80+ var result = Getter ( ( TTarget ) target ) ;
81+ Console . WriteLine ( $ "CallPropertyGetter result: { result } ") ;
82+ return result ;
7883 }
7984
80- private static TValue CallPropertyGetterByReference < TTarget , TValue > (
85+ private static object ? CallPropertyGetterByReference < TTarget , TValue > (
8186 ByRefFunc < TTarget , TValue > Getter ,
8287 object target )
8388 where TTarget : notnull
8489 {
90+ Console . WriteLine ( $ "CallPropertyGetterByReference called: TTarget={ typeof ( TTarget ) } , TValue={ typeof ( TValue ) } , target={ target } ") ;
8591 var unboxed = ( TTarget ) target ;
86- return Getter ( ref unboxed ) ;
92+ var result = Getter ( ref unboxed ) ;
93+ Console . WriteLine ( $ "CallPropertyGetterByReference result: { result } ") ;
94+ return result ;
8795 }
8896}
0 commit comments