【问题标题】:Why are the elements in my array still null?为什么我的数组中的元素仍然为空?
【发布时间】:2014-09-10 10:20:11
【问题描述】:

这一切都在 Unity 中使用 Monodevelop

我这样声明我的数组

Tile[] Tiles = new Tile[7];

然后我尝试像这样循环并设置元素(尽管这本身就是为了解决这个问题)

for (int i = 0; i < Tiles.Length; i++) 
{
    Tiles[i] = new Tile();
}

但是,集合中仍然充满了 7 个空对象。我一定错过了一些简单的东西。我原以为最初的代码行就足够了。

整个例子:

using UnityEngine;
using System.Collections;

public class Foo : MonoBehaviour
{
    Tile[] Tiles = new Tile[7];

    // Use this for initialization
    void Start ( ) 
    {
        for (int i = 0; i < Tiles.Length; i++) 
        {
            Tiles[i] = new Tile();
        }
    }
}

这是 Tile 类

using UnityEngine;
using System.Collections;

public class Tile
{
    public Tile[] nonAdjacentTiles = new Tile[6];
    public Transform _mesh;
}

【问题讨论】:

  • 你能发布一个完整的例子来演示我们可以运行的问题吗?到目前为止,您的代码暗示您遇到的问题是不可能的,因为数组中的项目已成功初始化。
  • 请展示一个完整的例子。您展示的内容不应导致您描述的行为。
  • 这就是整个例子
  • @SirYakalot 整个示例是一个控制台应用程序,其他人可以运行它来重现您的问题。如果我“填补空白”以使您的代码运行,它会正常工作。很明显,还有其他事情正在发生,例如您可能正在查看不同的对象引用。
  • @SirYakalot 您是否确认在查看Tiles 的状态之前调用了Start() 方法?它的documentation 声明它在调用任何Update 方法之前被调用。

标签: c# arrays unity3d


【解决方案1】:

由于某种原因,Tile 类中需要一个构造函数,我不确定具体原因,但使用 Unity 和 Monodevelop 似乎不支持默认构造函数。

【讨论】:

    【解决方案2】:

    Siryakalot 正如你所说,你需要 Tile 类中的构造函数,因为你不能像这样实例化 Tyle 类型的对象:

    Tiles[i] = new Tile();
    

    在 Tile 类中没有构造函数 Tile()

    祝你好运:)

    【讨论】:

    • 这是为什么呢?它是 Unity 特有的吗?
    • 这是一个面向对象的规则
    • 您使用的是 C#,而 C# 是一种面向对象的编程语言
    【解决方案3】:

    不,类数组的默认值为空。 所以你需要在之后循环并填充数组。

    我喜欢这里发布的解决方案,以清洁您的阵列。 https://stackoverflow.com/a/4839502/4018288

    【讨论】:

    • 欢迎来到 Stack Overflow!虽然这在理论上可以回答问题,it would be preferable 在此处包含答案的基本部分,并提供链接以供参考。
    • @Vogel612 不幸的是,这无法回答这个问题......而且充其量只是一个评论。
    • @AdamHouldsworth 嗯...点了。唉,答案可能应该得到一个 NAA 标志。我只是对答案的质量投了反对票并自动评论了答案,因为对我来说很明显这一点最需要它。我什至没有检查正确性......
    猜你喜欢
    • 1970-01-01
    • 2022-06-13
    • 2022-08-03
    • 2021-07-19
    • 2018-08-28
    • 2013-09-14
    • 1970-01-01
    • 2019-09-04
    • 1970-01-01
    相关资源
    最近更新 更多