在初始化配置表的值是,除了用Json给对象赋值外,C#还可以通过反射给对象赋值。
注意:
1、对象的变量必须是共有变量,否则通过反射方法GetField时为空。
2、在给变量赋值是,需要将值转换为变量对应的类型,否则会报异常。
一、新建测试脚本:先给变量赋初始值作为对比。
public class TestData
{
public string Test ;
public int Test1;
public TestData()
{
Test = "默认值";
Test1 = 0;
}
public void Log()
{
Debug.LogError(Test+":"+ Test1);
}
}
二、创建对象:
根据类型创建对象,设置变量值(注意变量类型和设置值的类型)。
private T ReflectionTest<T>(Dictionary<string, string> value)
{
Type type = typeof(T);
object obj = Activator.CreateInstance(type);
foreach (var item in value)
{
FieldInfo variable = type.GetField(item.Key);
if (variable == null)
{
continue;
}
variable.SetValue(obj, Convert.ChangeType(item.Value, variable.FieldType));
}
return (T)obj;
}
三、测试:
初始化对象,打印默认值,通过反射创建对象,打印设置值。
void Start()
{
Dictionary<string, string> keyValuePairs = new Dictionary<string, string>();
keyValuePairs.Add("Test", "Test");
keyValuePairs.Add("Test1", "10");
TestData testData = new TestData();
testData.Log();
testData = ReflectionTest<TestData>(keyValuePairs);
testData.Log();
}
四、结果:
对比发现对象的值已经修改为字典的值。