private static System.Linq.Expressions.ConstantExpression InvokeValue(IAccessibleValueExpression AccessibleValueExpression) { System.Reflection.MemberInfo mi = AccessibleValueExpression.MemberInfo; System.Reflection.BindingFlags bindingFlag = GetMemberBindingFlagByMemberInfoType(mi.MemberType); object obj = null; if (AccessibleValueExpression.Expression != null) { System.Linq.Expressions.ConstantExpression ce = (System.Linq.Expressions.ConstantExpression)AccessibleValueExpression.Expression; obj = ce.Value.GetType().InvokeMember(mi.Name, bindingFlag, null, ce.Value, AccessibleValueExpression.Args); } else { //static member obj = mi.ReflectedType.InvokeMember(mi.Name, bindingFlag, null, null, AccessibleValueExpression.Args); } Type objType = obj.GetType(); //Expression.MethodCall won't accept parameter if it diiffrent from its parameter type if (mi.ToString().Contains("System.Object")) { objType = typeof(object); } return System.Linq.Expressions.ConstantExpression.Constant(obj, objType); }
private static System.Linq.Expressions.ConstantExpression TryInvokeValue(IAccessibleValueExpression AccessibleValueExpression) { try { return InvokeValue(AccessibleValueExpression); } catch (System.Exception) { return null; } }