public static object GetValueDirect(this object obj, MemberInfo member, params object[] args) { switch (member.MemberType) { case System.Reflection.MemberTypes.Field: var field = member as System.Reflection.FieldInfo; return(field.GetValue(obj)); case System.Reflection.MemberTypes.Property: { var prop = member as System.Reflection.PropertyInfo; var paramInfos = prop.GetIndexParameters(); if (prop.CanRead && DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { return(prop.GetValue(obj, args)); } break; } case System.Reflection.MemberTypes.Method: { var meth = member as System.Reflection.MethodInfo; var paramInfos = meth.GetParameters(); if (DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { return(meth.Invoke(obj, args)); } break; } } return(null); }
public static bool TryGetValueDirect(object obj, string sprop, out object result, params object[] args) { const BindingFlags BINDING = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; result = null; if (obj == null) { return(false); } try { var tp = obj.GetType(); while (tp != null) { var members = tp.GetMember(sprop, BINDING); if (members == null || members.Length == 0) { return(false); } foreach (var member in members) { switch (member.MemberType) { case System.Reflection.MemberTypes.Field: var field = member as System.Reflection.FieldInfo; result = field.GetValue(obj); return(true); case System.Reflection.MemberTypes.Property: { var prop = member as System.Reflection.PropertyInfo; var paramInfos = prop.GetIndexParameters(); if (prop.CanRead && DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { result = prop.GetValue(obj, args); return(true); } break; } case System.Reflection.MemberTypes.Method: { var meth = member as System.Reflection.MethodInfo; var paramInfos = meth.GetParameters(); if (DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { result = meth.Invoke(obj, args); return(true); } break; } } } tp = tp.BaseType; } } catch { } return(false); }
public static object GetValueDirect(object obj, string sprop, params object[] args) { const BindingFlags BINDING = BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance; if (string.IsNullOrEmpty(sprop)) { return(null); } //if (sprop != null && sprop.Contains('.')) obj = DynamicUtil.ReduceSubObject(obj, sprop, out sprop); if (obj == null) { return(null); } try { var tp = obj.GetType(); while (tp != null) { var members = tp.GetMember(sprop, BINDING); if (members == null || members.Length == 0) { return(null); } foreach (var member in members) { switch (member.MemberType) { case System.Reflection.MemberTypes.Field: var field = member as System.Reflection.FieldInfo; return(field.GetValue(obj)); case System.Reflection.MemberTypes.Property: { var prop = member as System.Reflection.PropertyInfo; var paramInfos = prop.GetIndexParameters(); if (prop.CanRead && DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { return(prop.GetValue(obj, args)); } break; } case System.Reflection.MemberTypes.Method: { var meth = member as System.Reflection.MethodInfo; var paramInfos = meth.GetParameters(); if (DynamicUtil.ParameterSignatureMatches(args, paramInfos, false)) { return(meth.Invoke(obj, args)); } break; } } } tp = tp.BaseType; } } catch { } return(null); }