我有一个非常简单的例子:
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
,则表达式 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/