对象上的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)将被编译:

  • 如果objectbool类型的
  • 如果已经为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)将被编译的实例:

  • 如果objectbool类型的。
  • 如果已经为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