Пример #1
0
        public static IBatchable Create_Display(Input item, ev.Environment env)
        {
            IGetter <string> src;
            ISetter <string> dst;
            string           hdr = null;

            Arg asrc, adst, ahdr;

            if (!item.TrySet(out asrc, 1))
            {
                throw new ArgumentException("Первый аргумент, который должен быть переменной отсутствует");
            }
            if (!item.TrySet(out adst, 2))
            {
                throw new ArgumentException("Второй аргумент, который должен описывать способ отображения, отуствует");
            }
            if (item.TrySet(out ahdr, 3, "header"))
            {
                hdr = item.GetGetter_STR(env, ref ahdr).Get();
            }

            if (asrc.IsVariable)
            {
                src = env.GetGetter <string>(asrc.Value);
            }
            else if (asrc.Value == lg.KwAsk)
            {
                src = new GetterAskConsole(STR_ASKTEXT);
            }
            else
            {
                src = new GetterValue <string>()
                {
                    Value = asrc.Value
                }
            };

            if (adst.IsVariable)
            {
                dst = env[adst.Value].Value as ISetter <string>;
            }
            else
            {
                throw new ArgumentException("Второй аргумент должен быть переменной");
            }

            if (dst == null)
            {
                throw new InvalidCastException("Неизвестный способ отображения");
            }

            return(new CmdTransfer <string>(src, dst)
            {
                Text = hdr
            });
        }
Пример #2
0
        public IGetter <decimal> GetGetter_DEC(Environment.Environment env, ref Arg val, string askquestion = null)
        {
            if (val.IsVariable)
            {
                return(env.GetGetter <decimal>(val.Value));
            }
            else if (val.Value == lg.KwAsk)
            {
                return(new GetterAskConsole <decimal>(askquestion, new FactoryFunction <string, decimal>(decimal.Parse)));
            }

            if (decimal.TryParse(val.Value, out var value))
            {
                return new GetterValue <decimal>()
                       {
                           Value = value
                       }
            }
            ;

            throw new InvalidCastException("Аргумент '" + val.ToString() + "' не может быть превращён в число");
        }