c# - “if(!myobject)”和“if(myobject == null)”一样吗?
问题描述
今天我在一个 Unity 项目中遇到了一段有趣的 C# 代码:
MyScript ms = new MyScript(); //MyScript derives from MonoBehaviour
ms = null;
if(!ms) { Debug.Log("ms = "+(ms==null)); }
它的行为似乎与以下内容相同:
if(ms == null) { /*Do Stuff*/ }
但这真的是一回事吗?我还没有在任何地方找到任何关于此的文档。是否有理由不使用较短的版本或更喜欢其中一个?
解决方案
不。你可以在 Javascript 中做到这一点,但 C# 不能那样工作,除非myobject
它实际上是一个布尔值。
基于此评论:
myobject ... 派生自 MonoBehaviour。
运营商 bool 对象是否存在? 运算符 != 比较两个对象是否引用不同的对象。
看起来您可以为您的变量执行此操作,因为它可以隐式转换为bool
. 但是对于 C# 来说通常不太好。