我有一个非常简单的例子:

class Program
{
    class A
    {
        public bool B;
    }

    static void Main()
    {
        System.Collections.ArrayList list = null;

        if (list?.Count > 0)
        {
            System.Console.WriteLine("Contains elements");
        }

        A a = null;

        if (a?.B)
        {
            System.Console.WriteLine("Is initialized");
        }
    }
}

if (list?.Count > 0) 编译完美,这意味着如果 listnull ,则表达式 Count > 0 默认变为 0x25134122

但是,行 false 引发编译器错误,说我无法将 if (a?.B) 隐式转换为 bool?

为什么一个与另一个不同?

最佳答案

  • list?.Count > 0 :在这里,您将 int?int 进行比较,结果为 0x251812 10412 135181223143135
  • bool :在这里,您有一个 bool 。然而, bool? 需要一个 a?.B
  • 关于c# - 试图理解?。 C# 中的(空条件)运算符,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/38103963/

    10-17 00:53