【发布时间】:2014-07-18 20:59:07
【问题描述】:
我尝试“勾选”名为“knownSolarSystems”的数组中的每个对象,但由于定义,每个数组槽都已设置。 (至少不是空的les)
CSolarSystem[] knownSolarSystems;
public void Start () {
knownSolarSystems = new CSolarSystem[10];
knownSolarSystems[0] = new CSolarSystem();
}
在上面我创建了一个 CSolarSystem 类的对象,我将其粘贴到数组的第一个(第 0 个?)槽中。 (knownSolarSystems[0])
但即使我只有 1 个对象,foreach 循环也会继续 10 次,这给了我错误,因为它试图访问一些尚未定义的对象。
这是 foreach 循环:
foreach(CSolarSystem solarSystem in knownSolarSystems) {
solarSystem.Update();
}
这是错误:
NullReferenecException: Object reference not set to an instance of an object CUniverse.Update()
那么有没有办法“跳过”那些没有填满的插槽?
致以最诚挚的问候,deSpeach
【问题讨论】:
-
除了使用
Where跳过null值之外,你真的需要将它初始化为长度为10 的数组吗?你能改用List<CSolarSystem>吗? -
我想但是我不知道如何有效地使用它们所以我使用数组
-
你应该真正使用 List
,其中 T 是你的 CSolarSystem。这样就无需事先知道您处理了多少物体(当然,如果您知道太阳系中有多少物体,您仍然可以使用数组并将您的发现发布到 astronomy.stackexchange.com :-) -
我拥有的列表的最大问题是我无法真正访问我想要的列表...例如,我不知道如何尽可能轻松地处理这些列表数组。 (例如使用数组:example[1] = 5; 但使用列表:example.add(20); 但是如果我添加另一个插槽,我如何才能访问之前的插槽?这就是我使用数组的原因
-
"但是如果我添加另一个插槽,我如何访问之前的插槽?" 您可以像访问数组一样访问列表,例如通过索引:
CSolarSystem last = knownSolarSystems[knownSolarSystems.Count-1]