C# 是";如果(!myobject)";与“相同”;如果(myobject==null)“;?
今天,我在Unity项目中遇到了一段有趣的C代码: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
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.