通过反射来获取和设置特定类里特定字段的值

游戏都有初始配置文件,策划想在通过表格配置,
我第一反应是通过读表格数据,通过配置好的字段名称,然后利用switch来分别设置字段的值.,刚开始也确实是这么干的,后来数据越来越多,switch写的超超超超超超超超超超级长,强迫症的我看着非常难受…
后来想到反射能获取类,应该也能获取字段,研究了一下真的可行
上代码:

 			Type type = typeof(); //获取类
            if (type != null)
            {
                var fieldInfo = type.GetField("字段名");//获取字段
                if (fieldInfo != null)
                {
                    var value = fieldInfo.GetValue(类的实体);//获取字段当前的值
                    //判断该字段值得类型
                    if (fieldInfo.FieldType == typeof(int)) //int类型
                    {
                            fieldInfo.SetValue(类的实体, int.Parse("需要设置的值"));
                    }
                    else if (fieldInfo.FieldType == typeof(float))//float类型
                    {
                            fieldInfo.SetValue(类的实体, float.Parse("需要设置的值"));
                    }
                }
                else
                {
                  	Debug.LogError("没有该字段");
                }

FieldInfo.SetValue的原型是:void SetValue(object obj, object value)
当你传递一个值类型(结构是值类型)的时候,它要转化成object,也就是要装箱。
而SetValue将作用在那个装箱产品上,而不是原来的那个结构。

解决办法就是自己装箱和拆箱子:

object boxedB = b;        //自己装箱,以便拿到装箱产品

fi.SetValue(boxedB, a);   //

b = (B)boxedB;            //拆箱并拿到被SetValue的结果

Console.WriteLine(b.a.x);
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值