我尝试“勾选”名为“knownSolarSystems”的数组中的每个对象,但由于定义,每个数组插槽都已设置。 (至少它不是空的lels)
CSolarSystem[] knownSolarSystems;
public void Start () {
knownSolarSystems = new CSolarSystem[10];
knownSolarSystems[0] = new CSolarSystem();
}
上面我创建了一个CSolarSystem类的对象,它粘贴在数组的第一个(第0个?)插槽中。 (knownSolarSystems [0])
但即使我只有一个对象,foreach循环也会继续10次,这会给我带来错误,因为它试图访问一些尚未定义的对象。
这是foreach循环:
foreach(CSolarSystem solarSystem in knownSolarSystems) {
solarSystem.Update();
}
这就是错误:
NullReferenecException: Object reference not set to an instance of an object CUniverse.Update()
那么有一种方法可以“跳过”那些未填充的插槽吗?
最诚挚的问候,deSpeach
答案 0 :(得分:3)
使用Where
消除 null 值:
foreach(CSolarSystem solarSystem in knownSolarSystems.Where(x => x != null))
{
solarSystem.Update();
}
答案 1 :(得分:2)
有没有一种方法可以跳过"跳过"那些没有填补的插槽?
您只需检查它是否仍未初始化(null
):
foreach(CSolarSystem solarSystem in knownSolarSystems.Where(s => s != null)) {
solarSystem.Update();
}
请注意,您需要在文件顶部添加using System.Linq
。
另一种方法是使用List<T>
而不是可以增加的数组:
List<CSolarSystem> knownSolarSystems = new List<CSolarSystem>();
public void Start () {
knownSolarSystems.Add(new CSolarSystem());
}
答案 2 :(得分:2)
当然:检查一个插槽是否已填满,如果没有,则跳过它。
foreach(CSolarSystem solarSystem in knownSolarSystems) {
if (solarSystem == null) continue;
solarSystem.Update();
}
null
测试也可以像其他人发布的LINQ版本一样移动。