From 54b4f2de2291d8a8e4b68bfa451501a3e73e3c80 Mon Sep 17 00:00:00 2001 From: "grzegorz.russek" Date: Fri, 18 Feb 2022 06:24:51 +0000 Subject: [PATCH] --- AmalgamationTool/DynamORM.Amalgamation.cs | 29 +++++++++++++++++++++-- 1 file changed, 27 insertions(+), 2 deletions(-) diff --git a/AmalgamationTool/DynamORM.Amalgamation.cs b/AmalgamationTool/DynamORM.Amalgamation.cs index 76cfa0f..a1d15ad 100644 --- a/AmalgamationTool/DynamORM.Amalgamation.cs +++ b/AmalgamationTool/DynamORM.Amalgamation.cs @@ -10828,10 +10828,27 @@ namespace DynamORM { ParameterExpression param = Expression.Parameter(typeof(InvokeMemberBinder), "o"); + try + { + return Expression.Lambda>>( + Expression.TypeAs( + Expression.Field( + Expression.TypeAs(param, binderType), "typeArguments"), + typeof(IList)), param).Compile(); + } + catch + { + } + + PropertyInfo prop = binderType.GetProperty("TypeArguments"); + + if (!prop.CanRead) + return null; + return Expression.Lambda>>( Expression.TypeAs( - Expression.Field( - Expression.TypeAs(param, binderType), "typeArguments"), + Expression.Property( + Expression.TypeAs(param, binderType), prop.Name), typeof(IList)), param).Compile(); } } @@ -10888,6 +10905,14 @@ namespace DynamORM // If this was a success get and return it's value if (field != null) return field.GetValue(binder) as IList; + else + { + PropertyInfo prop = binder.GetType().GetProperty("TypeArguments"); + + // If we have a property, return it's value + if (prop != null) + return prop.GetValue(binder, null) as IList; + } } else {