Ejemplo n.º 1
0
        /// <summary>
        /// 获取属性模板替换后的结果字符串
        /// </summary>
        /// <param name="propertyTemplate">属性模板</param>
        /// <param name="seprator">分隔器</param>
        /// <param name="columnList">属性集合</param>
        /// <returns></returns>
        private string GetTemplateReplaceAfterChars(string propertyTemplate, string seprator, List <TableColumn> columnList)
        {
            //定义一个存储实体属性的code变量
            StringBuilder sb = new StringBuilder();

            //解析出限制或非限制长度的属性模板
            //1. 限制长度的模板
            var limitTemplate = ResolverPropertyTemplate(propertyTemplate, true);
            //2. 非限制长度的模板
            var unlimitTemplate = ResolverPropertyTemplate(propertyTemplate, false);

            //循环处理每个字段信息
            foreach (var column in columnList)
            {
                //循环项中的模板
                var template = column.TotalBit > 0 ? limitTemplate : unlimitTemplate;

                PropertyResolverContext context = new PropertyResolverContext(column, template);

                List <PropertyExpression> expList = new List <PropertyExpression>();
                expList.Add(new PropertyNameExpression());          //属性名解释器
                expList.Add(new PropertyDataTypeExpression());      //属性数据类型解释器
                expList.Add(new PropertyLimitLengthExpression());   //属性数据长度限制解释器
                expList.Add(new ProperytyDescriptionExpression());  //属性描述解释器

                foreach (var exp in expList)
                {
                    exp.Interpret(context);
                }

                if (sb.Length > 0)
                {
                    sb.Append(seprator);
                }

                sb.Append(context.Output);
            }

            return(sb.ToString());
        }
 /// <summary>
 /// 执行文法解释
 /// </summary>
 /// <param name="context"></param>
 public abstract void Interpret(PropertyResolverContext context);