/// <summary> /// Enumerable to tuple. /// </summary> /// <param name="enumerable">The enumerable.</param> /// <returns></returns> public static dynamic ToTuple(this IEnumerable enumerable) { var items = enumerable as IEnumerable <object> ?? enumerable.Cast <object>(); if (items.Count() < 8) { return(Dynamic.InvokeMember(StaticTuple, "Create", items.ToArray())); } return(Dynamic.InvokeMember(TuplerHelper, "Create", items.Take(7).Concat(new object[] { items.Skip(7).ToTuple() }).ToArray())); }
/// <summary> /// Invokes the invocation on specified target with specific args. /// </summary> /// <param name="target">The target.</param> /// <param name="args">The args.</param> /// <returns></returns> public virtual object Invoke(object target, params object[] args) { switch (this.Kind) { case InvocationKind.Constructor: return(Dynamic.InvokeConstructor((Type)target, args)); case InvocationKind.Convert: bool tExplicit = false; if (this.Args.Length == 2) { tExplicit = (bool)args[1]; } return(Dynamic.InvokeConvert(target, (Type)args[0], tExplicit)); case InvocationKind.Get: return(Dynamic.InvokeGet(target, this.Name.Name)); case InvocationKind.Set: Dynamic.InvokeSet(target, this.Name.Name, args.FirstOrDefault()); return(null); case InvocationKind.GetIndex: return(Dynamic.InvokeGetIndex(target, args)); case InvocationKind.SetIndex: Dynamic.InvokeSetIndex(target, args); return(null); case InvocationKind.InvokeMember: return(Dynamic.InvokeMember(target, this.Name, args)); case InvocationKind.InvokeMemberAction: Dynamic.InvokeMemberAction(target, this.Name, args); return(null); case InvocationKind.InvokeMemberUnknown: { try { return(Dynamic.InvokeMember(target, this.Name, args)); } catch (RuntimeBinderException) { Dynamic.InvokeMemberAction(target, this.Name, args); return(null); } } case InvocationKind.Invoke: return(Dynamic.Invoke(target, args)); case InvocationKind.InvokeAction: Dynamic.InvokeAction(target, args); return(null); case InvocationKind.InvokeUnknown: { try { return(Dynamic.Invoke(target, args)); } catch (RuntimeBinderException) { Dynamic.InvokeAction(target, args); return(null); } } case InvocationKind.AddAssign: Dynamic.InvokeAddAssignMember(target, this.Name.Name, args.FirstOrDefault()); return(null); case InvocationKind.SubtractAssign: Dynamic.InvokeSubtractAssignMember(target, this.Name.Name, args.FirstOrDefault()); return(null); case InvocationKind.IsEvent: return(Dynamic.InvokeIsEvent(target, this.Name.Name)); default: throw new InvalidOperationException("Unknown Invocation Kind: " + this.Kind); } }