gpt4 book ai didi

c# - 使变量成为必需的 - 以逃避 NullReferenceException?

转载 作者:太空宇宙 更新时间:2023-11-03 18:18:34 24 4
gpt4 key购买 nike

[已解决] - 错误是我的,我没有将世界 (world_) 链接到实体,所以它是空的。谢谢大家的解释!


您现在可能已经知道,我正在制作一个游戏引擎/框架,但我一直无法通过相互引用来链接内容。

例子:

public void Attach(Entity Entity)
{
entity_ = Entity;
entity_.world_.renderer_.AddComponent(this);
}

将组件添加到呈现器的行失败并出现 NullObjectException。我的想法是,这是因为它在类实现中(当对象尚未定义时),但这样的事情在下一段代码中起作用:

public TGSGame()
{
...
Renderer = new RenderManager(this);
...
}

这部分代码也在 TGSGame 类实现中!

有谁知道我该如何克服这个异常?

最佳答案

您需要检查 entity_entity_.world_entity_.world_.renderer_ - 如果任何这些是 null 它会爆炸。如果这些是对象的基础,通常最好在构造函数中初始化它们,并限制它们是否可以更改/设置回 null。例如:

public class Entity {
public World World {get;private set;}
public Entity(World world) {
if(world == null) throw new ArgumentNullException("world");
tihs.World = world;
}
}

这样做的好处是,问题出在哪里非常明显(它将显示为 "world" 参数的 ArgumentNullException,堆栈-跟踪指向 World 构造函数以及调用它的任何内容等)

关于c# - 使变量成为必需的 - 以逃避 NullReferenceException?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2095190/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com