类选择器遍历赋值_利用反射实现配置表数据到类对象数据的转换

在游戏开发中,配置表是不可少的。通常我们将一个类,做成一个配置表,将配置表每列的索引都和类的字段名严格对应起来。

先实例化一个类的对象,然后通过反射来遍历类中的字段,通过field.SetValue()给类的对象赋值。但是配置表类型全部是string,类中的字段类型并不确定,这就需要我们再写个函数将string类型的配置表数据转化为不同类型的类里面的字段数据了。

配置表类 Config:

public class Config
{
    public int id;
    public int age;
    public string name;
    public int[] skills;
}

根据Config类,构造一个配置表 config.txt:(第一行的类型并不起作用,只是配表的时候看的)

381b798d93f14d53298935ae4df81252.png

上代码:

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

这样就完成了,配置表数据到类对象数据的转换。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值