BKS*_*BKS 3 .net c# .net-4.6.1
这是我的代码
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");
}
}
}
Run Code Online (Sandbox Code Playgroud)
该程序的输出
它是一个公寓
如果条件成员或元素访问操作链中的一个操作返回null,则该链的其余部分将不执行。
在这种情况下,Address对象为null,我不明白为什么它不在代码的else分支中出现?
更新
什么是使用快捷运算符进行跟踪的等效代码?
if (employee.Address != null && employee.Address.IsAppartment == true)
{
Console.WriteLine("Its an apartment");
}
else
{
Console.WriteLine("No employee address or not an apartment");
}
Run Code Online (Sandbox Code Playgroud)
这是正确的,链的其余部分不执行,空值运算符operator ?? 工作和回报true。每个MSDN
空合并运算符?? 如果不为空,则返回其左操作数的值;否则,它将评估右侧操作数并返回其结果。
如果您想将结果与true或进行比较false(每次更新),则可以使用
if (employee?.Address?.IsAppartment == true)
{
}
Run Code Online (Sandbox Code Playgroud)
左侧操作数返回Nullable<bool>,您也可以在MSND中阅读
更新什么是使用快捷运算符进行跟踪的等效代码?
if (employee.Address != null && ? employee.Address.IsAppartment == true)
if (employee?.Address?.IsAppartment == true)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
142 次 |
| 最近记录: |