在游戏开发中,配置表是不可少的。通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来。
先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue()给类的对象赋值。但是配置表类型全部是string,类中的字段类型并不确定,这就需要我们再写个函数将string类型的配置表数据转化为不同类型的类里面的字段数据了。
配置表类 Config:
public class Config
{public int id;public int age;public string name;public int[] skills;
}
根据Config类,构造一个配置表 config.txt:(第一行的类型并不起作用,只是配表的时候看的)
上代码:
public Config ConfigDemo()
{//从配置表读取string类型的字符串,key为类的字段名,必须保持一致。value是准备赋值给Config对象的数据Dictionary<string, string> dicSetting = new Dictionary<string, string>();dicSetting.Add("id", "1");dicSetting.Add("age", "8");dicSetting.Add("name", "zxs");dicSetting.Add("skills", "9,5,2,7");//构造一个Config对象Config config = new Config();Type type = config.GetType();FieldInfo[] fields = type.GetFields();foreach(var oneField in fields){object value = ChangeType(dicSetting[oneField.Name], oneField.FieldType);oneField.SetValue(config, value);}return config;
}//string类型转换为不同的字段类型
public object ChangeType(string str,Type type)
{if (type == typeof(string)){return str;}if (type == typeof(int)){return int.Parse(str);}if (type == typeof(int[])){List<int> list = new List<int>();string[] strs = str.Split(',');foreach(string one in strs){list.Add(int.Parse(one));}return list.ToArray();}//...自己实现更多类型return null;
}
这样就完成了,配置表数据到类对象数据的转换。