检查检查器中的数组是否为空

时间:2016-12-31 08:14:49

标签: c# arrays unity3d

我有一个应该在检查器中填充的公共数组,如果该数组为空,我想做一些事情。 检查器中该数组为空" size = 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
        }
    }

1 个答案:

答案 0 :(得分:3)

你的if语句if (objects.Length < 0 )是错误的。

空时,数组通常为0。当它为0时,if (objects.Length < 0 )将永远不会为真,因为您正在检查数组长度是否小于0而不是数组长度是否等于0 ..

应为if (objects.Length == 0 )if (objects.Length <= 0 )

编辑:

  

好的,但这对我没有任何意义,因为当我添加时   一个对象并检查&#34;对象[0]和#34;它返回那个对象,意思是   一个包含1个对象的数组将被索引为0,但同样如此   时间a&#34;长度&#34; 0意味着它是空的吗?

有一个数组大小,有元素。当我说空时,我的意思是不从编辑器设置大小。由于objects是公共变量,因此编辑器会将其默认值设为0。当我说空数组时0就是我的意思。Debug.Log(objects.Length);将输出0

空数组:

enter image description here

非空数组:

enter image description here

在这种情况下,即使元素1 Debug.Log(objects.Length);或未分配任何内容,null也应打印3。 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);
    }
}