Here is my code
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");
}
}
}
The output of this program
Its an apartment
According to the definition of ?. operator
if one operation in a chain of conditional member or element access operations returns null, the rest of the chain doesn't execute.
In this case, Address object is null, I don't understand why it's not going in the else branch of the code here?
UPDATE
What will be equivalent code for following using short cut operators?
if (employee.Address != null && employee.Address.IsAppartment == true)
{
Console.WriteLine("Its an apartment");
}
else
{
Console.WriteLine("No employee address or not an apartment");
}
This is correct, the rest of the chain doesn't execute, null-coalescing operator ??
returns true
. According to MSDN
The null-coalescing operator ?? returns the value of its left-hand operand if it isn't null; otherwise, it evaluates the right-hand operand and returns its result.
If you want to compare the result with either true
or false
(per your update) you can use
if (employee?.Address?.IsAppartment == true)
{
}
The left-hand operand returns Nullable<bool>
, you can also read about it in MSDN
UPDATE What will be equivalent code for following using short cut operators?
if (employee.Address != null && ? employee.Address.IsAppartment == true)
if (employee?.Address?.IsAppartment == true)
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With