通过反射设置变量

时间:2014-02-07 07:51:06

标签: c# unity3d

我尝试设置一个变量值,知道它的名字是一个字符串,例如:

//JAVASCRIPT version
myObj["varName"] = someValue;

在stackoverflow.com上阅读其他一些答案我找到了以下解决方案

// C# version
myObj.GetType ().GetProperty ("varName").SetValue (myObj, someValue, null);

编译这个会给我一个NullReference异常,虽然我可以清楚地看到我的班级有一个名字完全相同的 public 变量。

我是C#的新手并且可能遗漏了一些东西,如果有人能指出我的错误,我将不胜感激。

2 个答案:

答案 0 :(得分:2)

根据您的说明myVar是一个字段。因此,您需要使用GetField而不是GetProperty

答案 1 :(得分:2)

如果变量是一个字段,这应该可以解决问题:

myObj.GetType().GetField("varName", BindingFlags.Instance | BindingFlags.Public).SetValue(myObj, someValue, null);

如果是属性:

myObj.GetType().GetProperty("varName", BindingFlags.Instance | BindingFlags.Public).SetValue(myObj, someValue, null);
相关问题