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
更新使用快捷操作符进行以下操作的等效代码是什么?
if (employee.Address != null && ? employee.Address.IsAppartment == true)
if (employee?.Address?.IsAppartment == true)
Please check the MSDN, ?: operator - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/conditional-operator
??: operator - https://docs.microsoft.com/en-us/dotnet/csharp/language-reference/operators/null-coalescing-operator
hope it will help you.. :-)
The technical post webpages of this site follow the CC BY-SA 4.0 protocol. If you need to reprint, please indicate the site URL or the original address.Any question please contact:yoyou2525@163.com.