C# 是";如果(!myobject)";与“相同”;如果(myobject==null)“;?

C# 是";如果(!myobject)";与“相同”;如果(myobject==null)“;?,c#,unity3d,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*/ } 但这真的是一回事吗?我还没有找到任何关于这个的文档。有没有理由不使用较短的版本或更喜欢其中一个版本?没有。你可以在Ja

今天,我在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
实际上是一个布尔值


根据这一评论:

我的对象。。。源于单一行为

这段摘录自:

操作员 bool对象是否存在? 接线员!=比较两个对象是否引用不同的对象。
看起来您可以对变量执行此操作,因为它可以隐式转换为
bool
。但是,如果(!myobject)不编译,对于C#。

来说通常是不合适的,除非myobject是bool或者您定义了一个操作符!对于您的类,
myobject
的类型是什么?我添加了一个示例,它可以编译,即使它不是bool。因此,我的问题不是重复的。如果类为
bool
提供了一个隐式运算符,您可以这样做,但我不鼓励使用这种魔法
公共静态隐式运算符bool(MyClass obj){return obj!=null;}
@TimSchmelter或
true
+
false
运算符;i、 e.
publicstaticbool操作符true(class1x)=>x!=无效
公共静态布尔运算符false(Class1 x)=>x==null。。。或者使用隐式运算符defined@CamiloTerevinto或者定义了
true
/
false
运算符,这与隐式转换运算符或读取文档不同,
monobhavior
类型为
提供运算符重载和隐式
bool
转换。因此,这可以用于该对象,但在C#中通常不合适。@CamiloTerevinto很少使用,令人惊讶的是:人们对它不熟悉,我并不感到惊讶it@Neph这不是魔术,只是开发Unity的人太喜欢JavaScript了。只要看看脚本中默认的类似JavaScript的间距。。。 Operators bool Does the object exist? operator != Compares if two objects refer to a different object.