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

C#检查数组的插槽中是否填充了类对象,c#,arrays,object,C#,Arrays,Object,我试图“勾选”名为“knownSolarSystems”的数组中的每个对象,但由于定义的关系,每个数组槽都已设置。 (至少它不是空的lels) 在上面,我创建了一个CSolarSystem类的对象,并将其粘贴到数组的第一个(第0个?)插槽中。(knownSolarSystems[0]) 但即使我只有一个对象,foreach循环也会继续10次,这给了我错误,因为它试图访问一些尚未定义的对象 这是foreach循环: foreach(CSolarSystem solarSystem in known

我试图“勾选”名为“knownSolarSystems”的数组中的每个对象,但由于定义的关系,每个数组槽都已设置。 (至少它不是空的lels)

在上面,我创建了一个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()
那么,有没有一种方法可以“跳过”那些没有填满的插槽呢

为了表示最好的敬意,请使用Dispeach消除空值:

那么,有没有一种方法可以“跳过”那些没有填满的插槽呢

您只需检查它是否仍未初始化(
null
):

请注意,您需要使用System.Linq在文件顶部添加

另一种方法是使用
列表
而不是可以增加的数组:

List<CSolarSystem> knownSolarSystems = new List<CSolarSystem>();

public void Start () {
    knownSolarSystems.Add(new CSolarSystem());
}
List knownSolarSystems=new List();
公共无效开始(){
添加(新的CSolarSystem());
}

当然:检查插槽是否已填满,如果未填满,则跳过它

foreach(CSolarSystem solarSystem in knownSolarSystems) {
    if (solarSystem == null) continue;
    solarSystem.Update();
}

null
测试也可以随着其他人发布的LINQ版本的显示而移动。

除了使用
Where
跳过
null
值之外,您真的需要将其初始化为长度为10的数组吗?你能用一个
列表来代替吗?我想,但我不知道如何有效地使用它们,所以我使用数组。你真的应该用一个列表,其中t是你的系统。这就不需要事先知道你要处理多少个物体(当然,如果你知道太阳系中有多少个物体,你仍然可以使用一个阵列并将你的发现发布在:-)我的列表最大的问题是我无法真正访问我想要的列表。。。例如,我不知道如何像处理数组一样轻松地处理这些列表。(例如,对于一个数组:example[1]=5;但是对于一个列表:example.add(20);但是如果我添加了另一个插槽,我以前如何访问该插槽?这就是为什么我使用数组“但是如果我添加了另一个插槽,我以前如何访问该插槽?”您可以通过索引以与数组相同的方式访问列表,例如:
CSolarSystem last=knownSolarSystems[knownSolarSystems.Count-1]
它给了我一个错误,没有定义“Where”您需要使用System.Linq添加
,我已经编辑了我的答案。但是这个答案也跳过了填充的数组D:
foreach(CSolarSystem solarSystem in knownSolarSystems.Where(s => s != null)) {
    solarSystem.Update();
}
List<CSolarSystem> knownSolarSystems = new List<CSolarSystem>();

public void Start () {
    knownSolarSystems.Add(new CSolarSystem());
}
foreach(CSolarSystem solarSystem in knownSolarSystems) {
    if (solarSystem == null) continue;
    solarSystem.Update();
}