Exemplo n.º 1
0
 /// <summary>
 /// 读取所有配置表
 /// </summary>
 /// <param name="filePathList"></param>
 private IEnumerator ReadAllConfigData(string[] filePathList)
 {
     foreach (var filePath in filePathList)
     {
         var configDataTableInfo = new ConfigDataTableInfo();
         configDataTableInfo.Initialize(filePath);
         m_configDataTableInfoDic.Add(configDataTableInfo.TableName, configDataTableInfo);
         yield return(null);
     }
 }
        private CodeTypeDeclaration BuildTableTypeClass(ConfigDataTableInfo tableInfo)
        {
            CodeTypeDeclaration typeDefineClass = new CodeTypeDeclaration("ConfigData" + tableInfo.TableName);

            if (tableInfo.TableType == ConfigDataTabelType.DataTable)
            {
                typeDefineClass.CustomAttributes.Add(new CodeAttributeDeclaration(
                                                         new CodeTypeReference(typeof(SerializableAttribute))));
                typeDefineClass.IsClass        = true;
                typeDefineClass.TypeAttributes = System.Reflection.TypeAttributes.Public;
                foreach (var columnInfo in tableInfo.ColumnInfoList)
                {
                    string          fieldName = "m_" + columnInfo.ColumnName;
                    CodeMemberField field     = new CodeMemberField(columnInfo.ColumnType, fieldName);
                    field.Attributes = MemberAttributes.Private;
                    typeDefineClass.Members.Add(field);
                    CodeMemberProperty property = new CodeMemberProperty();
                    property.Attributes = MemberAttributes.Public | MemberAttributes.Final;
                    property.Name       = columnInfo.ColumnName;
                    property.Type       = new CodeTypeReference(columnInfo.ColumnType);
                    property.HasGet     = true;
                    property.HasSet     = true;
                    property.GetStatements.Add(new CodeMethodReturnStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName)));
                    property.SetStatements.Add(new CodeAssignStatement(new CodeFieldReferenceExpression(new CodeThisReferenceExpression(), fieldName), new CodePropertySetValueReferenceExpression()));
                    typeDefineClass.Members.Add(property);
                }
            }
            else if (tableInfo.TableType == ConfigDataTabelType.EnumTable)
            {
                typeDefineClass.IsEnum         = true;
                typeDefineClass.TypeAttributes = System.Reflection.TypeAttributes.Public;
                foreach (var pair in tableInfo.EnumTupleDic)
                {
                    typeDefineClass.Members.Add(new CodeSnippetTypeMember(string.Format("{0} = {1}", pair.Key, pair.Value)));
                }
            }
            return(typeDefineClass);
        }
Exemplo n.º 3
0
        /// <summary>
        /// 使用反射产生对应表的List数据
        /// </summary>
        /// <param name="configTableDataTypeDefine"></param>
        /// <param name="tableInfo"></param>
        /// <returns></returns>
        private System.Object FillDynamicListWithTableData(Type configTableDataTypeDefine, ConfigDataTableInfo tableInfo)
        {
            var listType  = typeof(List <>).MakeGenericType(configTableDataTypeDefine);
            var list      = Activator.CreateInstance(listType);
            var addMethod = listType.GetMethod("Add");

            if (tableInfo.Row > 2)
            {
                for (int i = 2; i < tableInfo.Row; i++)
                {
                    var data = Activator.CreateInstance(configTableDataTypeDefine);
                    foreach (var columnInfo in tableInfo.ColumnInfoList)
                    {
                        try
                        {
                            var filedInfo = configTableDataTypeDefine.GetField("m_" + columnInfo.ColumnName, BindingFlags.NonPublic | BindingFlags.Instance);
                            var value     = ConfigDataColumnTypeSolver.GetValue(tableInfo.ReadCell(i, columnInfo.ColumnNo), columnInfo.TypeStr);
                            filedInfo.SetValue(data, value);
                        }catch (Exception e)
                        {
                            Debug.LogError(string.Format("FillDynamicListWithTableData while process table {0} column {1}, msg:{2}", tableInfo.TableName, columnInfo.ColumnName, e.Message));
                        }
                    }
                    addMethod.Invoke((object)list, new object[] { data });
                }
            }
            return(list);
        }