示例#1
0
        public static object GetMember(object obj, string member,
                                       object[] parametersHint, bool throwIfUndefined)
        {
            if (obj is IScope)
            {
                // FIXME - shouldn't be using exceptions for this

                try
                {
                    return(((IScope)obj).GetName(member));
                }
                catch
                {
                }
            }

            MemberInfo memberInfo = FindMember(obj, member,
                                               parametersHint);

            if (memberInfo == null)
            {
                if (throwIfUndefined)
                {
                    throw new Exception("can't find getable member "
                                        + TextEscape.Quote(member) + " in "
                                        + TypeNames.GetName(obj.GetType()));
                }
                else
                {
                    return(null);
                }
            }

            if (memberInfo is MethodInfo)
            {
                return(new ClrObjectMethodBinding(obj, (MethodInfo)memberInfo));
            }
            else if (memberInfo is PropertyInfo)
            {
                return(((PropertyInfo)memberInfo).GetValue(obj, null));
            }
            else if (memberInfo is FieldInfo)
            {
                object fieldValue = ((FieldInfo)memberInfo).GetValue(obj);

                if (fieldValue is Method)
                {
                    fieldValue = new ObjectMethodBinding(obj,
                                                         (Method)fieldValue);
                }

                return(fieldValue);
            }
            else
            {
                throw new Exception("can't get "
                                    + TypeNames.GetName(memberInfo.GetType()));
            }
        }
示例#2
0
        public static object GetMember(object obj, string member,
            object[] parametersHint, bool throwIfUndefined)
        {
            if (obj is IScope)
            {
                // FIXME - shouldn't be using exceptions for this
                
                try
                {
                    return ((IScope) obj).GetName(member);
                }
                catch
                {
                }
            }

            MemberInfo memberInfo = FindMember(obj, member,
                parametersHint);
            
            if (memberInfo == null)
            {
                if (throwIfUndefined)
                    throw new Exception("can't find getable member "
                        + TextEscape.Quote(member) + " in "
                        + TypeNames.GetName(obj.GetType()));
                else
                    return null;
            }
            
            if (memberInfo is MethodInfo)
            {
                return new ClrObjectMethodBinding(obj, (MethodInfo) memberInfo);
            }
            else if (memberInfo is PropertyInfo)
            {
                return ((PropertyInfo) memberInfo).GetValue(obj, null);
            }
            else if (memberInfo is FieldInfo)
            {
                object fieldValue = ((FieldInfo) memberInfo).GetValue(obj);
                
                if (fieldValue is Method)
                    fieldValue = new ObjectMethodBinding(obj,
                        (Method) fieldValue);

                return fieldValue;
            }
            else
            {
                throw new Exception("can't get "
                    + TypeNames.GetName(memberInfo.GetType()));
            }
        }