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

Nep*_*eph -2 c# unity-game-engine

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

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

它看起来似乎表现如下:

if(ms == null) { /*Do Stuff*/ }
Run Code Online (Sandbox Code Playgroud)

但它真的是一回事吗?我还没有找到任何关于此的文档.有没有理由不使用较短的版本或更喜欢一个?

Joe*_*orn 6

不可以.您可以在Javascript中执行此操作,但C#不会像那样工作,除非myobject实际上是布尔值.


根据这个评论:

myobject ......来自MonoBehaviour.

以及MonoBehavior文档的摘录:

Operators

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

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

  • ...或者定义了隐式运算符 (6认同)
  • 定义@CamiloTerevinto或`true` /`false`运算符,它与隐式转换运算符**不同** (2认同)
  • @Neph这不是魔术,只是开发Unity的人非常喜欢JavaScript.只需在脚本中默认查看类似JavaScript的间距... (2认同)