c# - 如何覆盖 NullReferenceException 行为以获得更好的信息量更大的错误?

标签 c# .net unity3d mono

上下文

在 Unity 中,NullReferenceException 仅记录错误,不会将 IDE 踢入 Debug模式。游戏有时很难为错误 100% 发生的情况重新创建相同的环境。

组件变量通过unity编辑器序列化暴露,设计者经常忘记赋值,造成组件成员变量为NULL的这种情况。

由于 Unity 的特殊情况,NullReferenceException 是最常见的异常,我正在尝试探索使异常立即更加明显的方法。

问题

NullReferenceException 消息非常无用。对我来说,当我看到 NullReferenceException 时,我什至不知道哪个变量是 NULL。


player.GetComponent<Movement>().AnothingVariable.CallFunction() // NullReferenceException, which part caused it?

当前错误信息:

NullReferenceException: Object reference not set to an instance of an object

理想的错误信息:

NullReferenceException: Trying to access CallFunction in type Movement, in GameObject "Player" from component "Controller".

最佳答案

如果异常没有帮助,这通常意味着一行中的命令太多。一个简单的解决方案是将代码拆分成更多行,使用临时变量来存储每个成员调用(函数、属性或字段)的结果。

这可能不会是性能损失。编译器和 JiT 编译器应该能够注意到这些变量在很大程度上是“无用的”,并在发布构建期间将它们删除。您将获得更好的可读性和可调试代码,几乎没有惩罚。

关于c# - 如何覆盖 NullReferenceException 行为以获得更好的信息量更大的错误?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48044565/

相关文章:

c# - 蛇游戏尾部

c# - CultureInfo 的包装器

c# - 如何在 Autofac 注册中返回 NULL?

.net - 将窗口焦点恢复到以前的所有者

c# - AutoMapper ProjectTo 继承问题

git - 如何停止忽略子树子目录中的文件模式?

c# - 如何检测是否从 Unity 安装了 Google Play 服务?

c# - 我怎样才能让 Sprite 在单人游戏中从一个位置到鼠标点击进行可见移动?

c# - 如何从 C# 中的抽象类实现 ObservableCollection<InterfaceType>?

c# - 有什么方法可以通过提供节点数来访问 TreeView 节点