/// <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); }
/// <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); }