Ejemplo n.º 1
0
        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);
        }
Ejemplo n.º 3
0
        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);
        }