2016-12-31 135 views
0

我有一個應該在檢查器中填充的公共數組,並且如果該數組爲空,我想要執行某些操作。 該數組在檢查空「大小= 0」檢查檢查器中的數組是否爲空

public GameObject[] objects; 

    void CheckArray() 
    { 
     if (objects.Length < 0) // this doesn't work 
     { 
      Debug.Log("Empty!"); 
     } 
     else 
     { 
      Debug.Log("Not Empty"); // this gets logged out 
     } 
    } 

以上不工作,我想別的東西,但也不起作用:

void CheckArray() 
    { 
     if (objects == null) // this doesn't work 
     { 
      Debug.Log("Empty!"); 
     } 
     else 
     { 
      Debug.Log("Not Empty"); // this gets logged out 
     } 
    } 
+0

當'objects.Length'爲'0'時,您在調試日誌中會期待什麼輸出? –

回答

3

你的if語句if (objects.Length < 0)是錯誤。

陣列通常爲0,當爲空時。當它是0if (objects.Length < 0)絕不會因爲要檢查,如果數組長度小於0,而是如果數組長度是等於0是真的..

這應該是if (objects.Length == 0)if (objects.Length <= 0)

編輯:

確定這個工作,但它沒有任何意義,因爲當我添加一個對象 並檢查「對象[0]」它返回該對象,意味着 一個數組與1對象將是指數在0處編輯,但在相同的 時間0的「長度」表示它是空的?

有一個數組大小,有元素。當我說空的時候,我的意思是不在編輯器中設置尺寸。由於objects是一個公共變量,因此編輯器會給它默認值00就是我說的空數組。Debug.Log(objects.Length);會輸出0

空數組:

enter image description here

非空數組:

enter image description here

在這種情況下,Debug.Log(objects.Length);應打印3,即使該元件1null或沒有被分配到它。 objects.Length將始終等於在編輯器中設置的大小。

GameObject camera = objects[0]; 
GameObject someObj = objects[1]; //ELEMENT IS NULL 
GameObject dLight = objects[2]; 

要檢查,如果每個個人元素爲空?

for (int i = 0; i < objects.Length; i++) 
{ 
    if (objects[i] == null) 
    { 
     Debug.Log("Empty!: " + i); 
    } 
    else 
    { 
     Debug.Log("Not Empty: " + i); 
    } 
} 
+0

好吧,這工作,但它沒有任何意義,因爲當我添加一個對象,並檢查「對象[0]」它返回該對象,意味着一個數組與1對象將索引在0,但在同一時間0的「長度」意味着它是空的?! – Abdou023

+0

修改答案來回答這個問題。 'objects.Length'總是在編輯器中設置的數組大小的數量,無論是否有插入到插槽中。可能讓你更多困惑。 – Programmer

+1

好的,現在更清晰了,謝謝。 – Abdou023