今天在幫實驗室研究生學長做一個小項目時碰見了一個問題(類中包含另一個類的數組時的初始化),代碼如下:
public class Test : MonoBehaviour {
private Class_B[] arry_B;
private int num = 3;
void Start () {
arry_B = new Class_B[num];
for(int i=0; i<num; i++)
{
for(int j=0; j<arry_B[i].num; j++)
{
arry_B[i].arry_A[j].name_A = "test";
}
}
}
}
public class Class_A{
public string name_A;
}
public class Class_B {
public Class_A[] arry_A;
public int num;
Class_B(){
num = 3;
arry_A = new Class_A[num];
}
}
在Unity+C#的環境下,聲明的兩個類的數組並調用時出現瞭如下錯誤,說是某個變量是空值:
定位到代碼中的位置是:
經過排查後發現,是在聲明變量時雖然開闢了數組的空間,但是對於數組中每個元素並沒有開闢相應的空間。這時就需要單獨去開闢。
調整後的代碼:
public class Test : MonoBehaviour {
private Class_B[] arry_B;
private int num = 3;
void Start () {
arry_B = new Class_B[num];
for(int i=0; i<num; i++)
{
arry_B[i] = new Class_B();
for(int j=0; j<arry_B[i].num; j++)
{
arry_B[i].arry_A[j].name_A = "test";
}
}
}
}
public class Class_A{
public string name_A;
}
public class Class_B {
public Class_A[] arry_A;
public int num;
public Class_B(){
num = 3;
arry_A = new Class_A[num];
for(int i=0; i<num; i++)
{
arry_A[i] = new Class_A();
}
}
}