将数据分配给变量时出现NullReferenceException

时间:2013-12-18 04:26:39

标签: c# reflection unity3d nullreferenceexception

在Unity3D中,我试图遍历对象上的所有组件并获取它们的变量和值。这是不断抛出异常的代码:

componentvariables = new ComponentVars[component.GetType().GetFields().Length];
int x = 0;
//Get all variables in component
foreach(FieldInfo f in component.GetType().GetFields()){
    componentvariables[x]=new ComponentVars();
    componentvariables[x].Vars.Add(f.Name,f.GetValue(component).ToString());
    x++;
}

ComponentVars类是

public class ComponentVars{
    public Dictionary<string, string> Vars{get;set;}
}

是的我知道这很简单,我可以使用一系列字典,但我打算稍后再添加更多字典。

不断抛出错误的部分是

componentvariables[x].Vars.Add(f.Name,f.GetValue(component).ToString());

我经常看到这些变量未初始化但我尝试初始化它(如上面的代码所示),我仍然继续得到NullRefEx。

谁能看到我在这里做错了什么?

1 个答案:

答案 0 :(得分:2)

在尝试向其添加值之前,请确保初始化Vars字典:

foreach(FieldInfo f in component.GetType().GetFields()){
    componentvariables[x] = new ComponentVars();
    componentvariables[x].Vars = new Dictionary<string, string>();
    componentvariables[x].Vars.Add(f.Name, f.GetValue(component).ToString());
    x++;
}

甚至更好,在课堂上初始化它:

public class ComponentVars{
    public Dictionary<string, string> Vars { get; private set; }

    public ComponentVars()
    {
        this.Vars = new Dictionary<string, string>();
    }
}