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