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())); } }
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())); } }