在游戏开发中,配置表是不可少的。通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来。
先实例化一个类的对象,然后通过反射来遍历类中的字段,通过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;
}
这样就完成了,配置表数据到类对象数据的转换。