“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中执行此操作,但除非myobject实际上是布尔值,否则C#不会起作用。


根据这个评论:

myobject ……来自MonoBehaviour。

以及来自MonoBehavior文档的摘录:

  运营商

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

看起来你可以为你的变量做这个,因为它可以隐式转换为bool 。 但对于C#来说通常都没有问题。