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