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

news/2024/5/19 4:01:05 标签: unity, 游戏开发, 反射, c#

游戏都有初始配置文件,策划想在通过表格配置,
我第一反应是通过读表格数据,通过配置好的字段名称,然后利用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);

http://www.niftyadmin.cn/n/1709353.html

相关文章

Unity-Behavior Designer行为树插件学习笔记

中文文档(不是很全,不过也够看了) 链接:https://pan.baidu.com/s/1ZJHU286-5qwbHhD9FbL4KQ 提取码:fxj1 下面是我自己学习是觉得比较重要的地方 一 .中断类型 Self :当一直在执行Log1时,CanSeeObject发生改变,Sequence会中断自身,然后执行Log2 LowerPr…

postgresql 浮点数函数_PostgreSQL数值类型--浮点类型和序列

PostgreSQL包括整数类型和浮点数类型。整数类型包括3种,分别是smallint、int和bigint。别名分别是int2、int(int4)和int8.常用数据类型是int(integer)。浮点类型分为精确浮点数类型numeric和不精确浮点数类型real(单精度浮点数据类型)和 double precision(双精度浮点…

一个简单的计时器

一个简单的计时器 using UnityEngine; using System.Collections; using System.Collections.Generic;public class TimerManager : MonoBehaviour {/// <summary>/// 全局实例/// </summary>private static TimerManager _Instance null;/// <summary>///…

antdesign 新增页面_Ant Design Pro开发后台管理系统(新增页面)-阿里云开发者社区...

通过实际demo演示一个管理后台的开发过程知识点&#xff1a;1、新增router&#xff0c;新增models新增菜单配置1、如上图所示&#xff0c;打开/src/common/menu.js可以看到菜单列表其中 menuData 是菜单数组&#xff0c;其中每个对象表示一个菜单name 表示菜单的名字path 表示菜…

Unity_InputManager各项详解

InputManager Input类&#xff1a; GetButton():如果制定的按钮按下&#xff0c;返回True。 GetKey():如果制定按键按下返回True。 GetMouseButton():制定鼠标按钮按下返回True。 ResetInputAxis():使用这个函数可以重置虽有输入&#xff0c;并把他们护肤到空挡或0. anyKey&am…

Unity编辑器工具_一键设置锚点

Unity编辑器工具_一键设置锚点 先把需要设置锚点的UI宽高拖拽到合适的位置和大小, 人后选中一个或多个UI(需RectTransform组件) 然后选择下面的一种进行设置 进行锚点的设置的两种方式 第一种点击相应的组件的右边重置的里面 第二种直接选择物体右键点击选择AllTools下的SetAl…

为什么开了数据不能上网_补过的轮胎不能开高速?为什么改装车喜欢外八?年前的最后一期K哥问答!...

眼瞅着就要过年了&#xff0c;无比舍不得车友们的K哥也不得不小小的休息一下。所以春节放假期间的更新会和往常有一个变化 —— 春节期间1月25日、27日、29日、31日更新&#xff0c;但是猜车和改装车图片暂停更新&#xff1b;2月1日起恢复正常更新&#xff08;猜车和改装车回归…

Unity编辑器工具_一键生成/修改预制体

Unity编辑器工具_一键生成/修改预制体 using System.Collections; using System.Collections.Generic; using UnityEngine; using UnityEditor; using System.IO;public class Tool {static Dictionary<int, Table_item> items_ID TableManager.Getitem();static Dicti…