“ if(!myobject)”是否与“ if(myobject == null)”相同?

时间:2018-08-30 13:34:26

标签: c# unity3d

今天,我在Unity项目中遇到了一些有趣的C#代码:

MyScript ms = new MyScript(); //MyScript derives from MonoBehaviour
ms = null;
if(!ms) { Debug.Log("ms = "+(ms==null)); }

它的行为似乎与以下内容相同:

if(ms == null) { /*Do Stuff*/ }

但这真的是同一回事吗?我还没有找到关于此的任何文档。是否有理由不使用较短的版本,或者不喜欢较短的版本?

1 个答案:

答案 0 :(得分:6)

不。您可以使用Javascript来做到这一点,但是C#不能这样工作,除非myobject实际上是布尔值。


基于此评论:

  

myobject ...源自MonoBehaviour。

以及MonoBehavior docs的摘录:

Operators

bool           Does the object exist?  
operator !=    Compares if two objects refer to a different object.  

您似乎可以对变量执行此操作,因为它可以隐式转换为bool。但是对于C#来说通常不行。