static void ReadConfigData <T>() where T : GameConfigDataBase { T obj = Activator.CreateInstance <T>(); string fileName = obj.getFilePath(); string getString = Resources.Load <TextAsset>("GameConfig/" + fileName).text; CsvReaderByString csr = new CsvReaderByString(getString); Dictionary <string, GameConfigDataBase> objDic = new Dictionary <string, GameConfigDataBase>(); FieldInfo[] fis = new FieldInfo[csr.ColCount]; for (int colNum = 1; colNum < csr.ColCount + 1; colNum++) { fis[colNum - 1] = typeof(T).GetField(csr[1, colNum]); } for (int rowNum = 3; rowNum < csr.RowCount + 1; rowNum++) { T configObj = Activator.CreateInstance <T>(); for (int i = 0; i < fis.Length; i++) { string fieldValue = csr[rowNum, i + 1]; object setValue = new object(); switch (fis[i].FieldType.ToString()) { case "System.Int32": setValue = int.Parse(fieldValue); break; case "System.Int64": setValue = long.Parse(fieldValue); break; case "System.String": setValue = fieldValue; break; default: Debug.Log("error data type"); break; } fis[i].SetValue(configObj, setValue); if (fis[i].Name == "key" || fis[i].Name == "id") { //只检测key和id的值,然后添加到objDic 中 objDic.Add(setValue.ToString(), configObj); } } } dataDic.Add(typeof(T), objDic); //可以作为参数 }
static void ReadConfigData <T>() where T : GameConfigDataBase { T obj = Activator.CreateInstance <T> (); string fileName = obj.getFilePath(); string getString = GameResourcesManager.GetGameConfigText(fileName); CsvReaderByString csr = new CsvReaderByString(getString); Dictionary <string, GameConfigDataBase> objDic = new Dictionary <string, GameConfigDataBase>(); FieldInfo[] _fileInfos = new FieldInfo[csr.ColCount]; for (int i = 1; i < csr.ColCount + 1; i++) { _fileInfos[i - 1] = typeof(T).GetField(csr[1, i]); } for (int rowNum = 3; rowNum < csr.RowCount + 1; rowNum++) { T configObj = Activator.CreateInstance <T>(); for (int colNum = 0; colNum < _fileInfos.Length; colNum++) { string fieldValue = csr [rowNum, colNum + 1]; object setvalue = new object(); switch (_fileInfos[colNum].FieldType.ToString()) { case "System.Int32": setvalue = int.Parse(fieldValue); break; case "System.Int64": setvalue = long.Parse(fieldValue); break; case "System.String": setvalue = fieldValue; break; case "System.Single": setvalue = float.Parse(fieldValue); break; default: Debug.Log("error data type"); break; } _fileInfos[colNum].SetValue(configObj, setvalue); if (_fileInfos[colNum].Name == "key" || _fileInfos[colNum].Name == "id") { objDic.Add(setvalue.ToString(), configObj); } } } dataDic.Add(typeof(T), objDic); }