コード例 #1
0
        public static TEx <T> Let <T, L>(string alias, Func <TExArgCtx, TEx <L> > content, Func <TEx <T> > inner, TExArgCtx applier)
        {
            var variabl = V <L>();

            using var let = applier.Let(alias, variabl);
            return(Ex.Block(new[] { variabl },
                            Ex.Assign(variabl, content(applier)),
                            inner()
                            ));
        }
コード例 #2
0
        public static Ex Let2(Alias[] aliases, Func <Ex> inner, TExArgCtx applier)
        {
            var stmts = new Ex[aliases.Length + 1];
            var vars  = new ParameterExpression[aliases.Length];
            var lets  = new List <IDisposable>();

            for (int ii = 0; ii < aliases.Length; ++ii)
            {
                Ex alias_value = aliases[ii].func(applier);
                lets.Add(applier.Let(aliases[ii].alias, vars[ii] =
                                         V(alias_value.Type, applier.Ctx.NameWithSuffix(aliases[ii].alias))));
                stmts[ii] = Ex.Assign(vars[ii], alias_value);
            }
            stmts[aliases.Length] = inner();
            for (int ii = 0; ii < lets.Count; ++ii)
            {
                lets[ii].Dispose();
            }
            return(Ex.Block(vars, stmts));
        }