It won't work this way. You can just skip the explanation and see the code below :)
As you know ?.
operator will return null if a child member is null. But what happens if we try to get a non-nullable member, like the Any()
method, that returns bool
? The answer is that the compiler will "wrap" a return value in Nullable<>
. For example, Object?.Any()
will give us bool?
(which is Nullable<bool>
), not bool
.
The only thing that doesn't let us use this expression in the if
statement is that it can't be implicitly casted to bool
. But you can do comparison explicitly, I prefer comparing to true
like this:
if (c?.Object?.Any() == true)
Console.Write("Container has items!");
Thanks to @DaveSexton there's another way:
if (c?.Object?.Any() ?? false)
Console.Write("Container has items!");
But as for me, comparison to true
seems more natural :)
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…