这是我的代码
class Address
{
public bool IsAppartment { get; set; }
}
class Employee
{
public string Name { get; set; }
public Address Address { get; set; }
}
class Program
{
static void Main(string[] args)
{
Employee employee = new Employee()
{
Name = "Charlie"
};
if (employee.Address?.IsAppartment ?? true)
{
Console.WriteLine("Its an apartment");
}
else
{
Console.WriteLine("No employee address or not an apartment");
}
}
}
该程序的输出
这是一间公寓
根据定义?.操作员
if 条件成员或元素访问链中的一个操作
操作返回 null,链的其余部分不执行。
在这种情况下,Address 对象为空,我不明白为什么它不进入代码的 else 分支?
UPDATE
使用快捷运算符的等效代码是什么?
if (employee.Address != null && employee.Address.IsAppartment == true)
{
Console.WriteLine("Its an apartment");
}
else
{
Console.WriteLine("No employee address or not an apartment");
}
这是正确的,链的其余部分不执行,空合并运算符??
回报true
。根据MSDN
空合并运算符 ??返回其左侧的值
操作数(如果不为空);否则,它评估右手
操作数并返回其结果。
如果您想将结果与其中之一进行比较true
or false
(根据您的更新)您可以使用
if (employee?.Address?.IsAppartment == true)
{
}
左侧操作数返回Nullable<bool>
,您还可以在MSDN
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)