首页 > 解决方案 > “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*/ }

但这真的是一回事吗?我还没有在任何地方找到任何关于此的文档。是否有理由不使用较短的版本或更喜欢其中一个?

标签: c#unity3d

解决方案


不。你可以在 Javascript 中做到这一点,但 C# 不能那样工作,除非myobject它实际上是一个布尔值。


基于此评论:

myobject ... 派生自 MonoBehaviour。

以及MonoBehavior 文档的摘录:

运营商

bool 对象是否存在?  
运算符 != 比较两个对象是否引用不同的对象。  

看起来您可以为您的变量执行此操作,因为它可以隐式转换为bool. 但是对于 C# 来说通常不太好。


推荐阅读