public override bool TryGetMember(GetMemberBinder binder, out object result) { if (base.TryGetMember(binder, out result)) { return(true); } result = ReflectionHelpers.GetValue(this.value, binder.Name); result = DynamicNode.Wrap(result); return(true); }
public override bool TryGetIndex(GetIndexBinder binder, object[] indexes, out object result) { if (indexes.Length == 1) { var memberName = indexes[0].ToString(); result = ReflectionHelpers.GetValue(this.value, memberName); result = DynamicNode.Wrap(result); return(true); } return(base.TryGetIndex(binder, indexes, out result)); }
public override bool TryInvoke(InvokeBinder binder, object[] args, out object result) { IExpando self = this.value; object[] constructorArgs = new object[0]; if (args.Length > 0) { self = (IExpando)DynamicNode.Unwrap(args[0]); constructorArgs = new object[args.Length - 1]; Array.ConstrainedCopy(args, 1, constructorArgs, 0, constructorArgs.Length); } result = ReflectionHelpers.Call(this.value, self, constructorArgs); result = DynamicNode.Wrap(result); return(true); }
public override bool TryInvokeMember(InvokeMemberBinder binder, object[] args, out object result) { if (binder.Name == "New") { var constructorArgs = new object[args.Length - 1]; Array.ConstrainedCopy(args, 1, constructorArgs, 0, constructorArgs.Length); result = ReflectionHelpers.New(this.value, (string)args[0], constructorArgs); } else { result = ReflectionHelpers.Invoke(this.value, binder.Name, args); } result = DynamicNode.Wrap(result); return(true); }