对象上的C#感叹号操作符
在c#中以下代码片段做了什么?
1)
if (!object)
{
//code
}
2)
if (object)
{
//code
}
哪里的对象是一个类的实例,肯定不是布尔。
1)在java中,尝试上面的代码会使编译器发出错误。 只有布尔变量可以用作Condition_Block。 这按预期工作。
2)在c ++中,如果(!object){...}用于空检查。
3)在C#中,编译器不会发生错误,并且很乐意编译它。 Google从未提及!运算符用于对象。 它只给出bool值的搜索结果。 此外,为了增加对伤害的侮辱,它会给人们谈论的结果吗? 和?? 运营商,这些运营对于团结开发者来说可能不会有30-40年的历史。 只支持NET3.5 api。 如果!惊叹号操作符像c ++一样工作,为什么人们需要? 和??。
编辑:完整的代码。
using UnityEngine;
使用System.Collections;
公共类Foo:MonoBehaviour {void Start(){Foo a = new Foo(); 如果(a)Debug.Log(“a”); 如果(!a)Debug.Log(“b”); }}
它在执行时打印“b”。
在C#中有三个实例,其中if (!object)
将被编译:
object
是bool
类型的 object
类型定义了implicit operator bool
重载。 !
运算符已被重载用于该类型的object
。 一个重载的例子!
:
class Test
{
public int Value;
public static bool operator ! (Test item)
{
return item.Value != 0;
}
}
接着:
Test test = new Test();
Console.WriteLine(!test); // Prints "False"
test.Value = 1;
Console.WriteLine(!test); // Prints "True"
在C#中有两个if (object)
将被编译的实例:
object
是bool
类型的。 object
类型定义了implicit operator bool
重载。 implicit operator bool
的示例:
class Test
{
public int Value;
public static implicit operator bool(Test item)
{
return item.Value != 0;
}
}
接着:
Test test = new Test();
Console.WriteLine(!test); // Prints "True"
if (test)
Console.WriteLine("This is not printed");
test.Value = 1;
Console.WriteLine(!test); // Prints "False"
if (test)
Console.WriteLine("This is printed");
链接地址: http://www.djcxy.com/p/13069.html
上一篇: C# Exclamation Operator On Object
下一篇: Null conditional operator to "nullify" array element existence