Possible Duplicates:
Deep Null checking, is there a better way?
C# elegant way to check if a property's property is null
i have to do a lookup in a deep object model like this:
p.OrganisationalUnit.Parent.Head.CurrentAllocation.Person;
is there anyway to evalute this and return null if any of the chain is null (organizationalunit, parent, head, etc), without having to do a
if (p.org == null && p.org.Parent == null && p.org.Parent.Head . . .
One way of avoiding returning null is using the Null Object pattern. Basically you return a special case object that implements the expected interface. Instead of returning null you can implement some kind of default behavior for the object. Returning a null object can be considered as returning a neutral value.
But also the code in the function we are calling should never return null. Null checks are bad but returning null is also equally bad. There are many things the called function could do to avoid returning null.
You are looking for the null-safe dereference operator ?.
(also known as safe navigation) that some languages (e.g. Groovy) have, but unfortunately C# does not have this operator.
Hopefully it will be implemented one day....
See also this post by Eric Lippert. The syntax he proposes there is .?
.
Have you heard of the Law of Demeter?
Chaining such long sequences of calls is not a good idea. It creates awful dependencies between classes that you don't need.
In your example, the class containing p
becomes dependent of five other classes. I suggest you simplify your code and make each class check for nulls at a single level, in their own context of knowledge.
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