C#检查数组的插槽是否填充了类对象

时间:2014-07-18 20:59:08

标签: c# arrays object

我尝试“勾选”名为“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

3 个答案:

答案 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版本一样移动。