我有这个非常简单的例子: 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)完全编译,这意味着如果list为null ,则默认情况下expression式Count > 0变为false 。 但是,行if (a?.B)抛出一个编译器错误,说我不能隐式转换bool? bool 。 为什么一个与另一个不同?