2013-12-18 194 views
0

在Unity3D中,我試圖遍歷對象上的所有組件,並獲取它們的變量和值。這是一個不斷拋出異常的代碼:NullReferenceException將數據分配給變量

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。

任何人都可以看到我在做什麼錯在這裏?

+0

屬性不會自動地初始化.. 你必須這樣做。正如@ p.s.w.g所述,初始化你的'Vars'屬性。 –

+0

謝謝西蒙,我只是忽略了這一點,它總是我錯過的簡單的事情。 –

+0

可能的重複[什麼是NullReferenceException,我該如何解決它?](http://stackoverflow.com/questions/4660142/what-is-a-nullreferenceexception-and-how-do-i-fix-it) – LearnCocos2D

回答

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>(); 
    } 
} 
+0

啊......就是這樣,我知道它必須是簡單的東西。謝謝! –