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 . . .
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.To answer the question in your title, you can avoid by applying the 'law of demeter' and creating a method called GetHeadOfParentOrganizationalUnit()
I'm not sure if the solution applies for your specific case, but it's worth a look if you can eliminate all those null checks.
See also: a link
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
.?
.You can use basic exception handling as well to catch that. I'm not crazy about that solution, but it is an option. If these nested nulls are normal operation, exceptions are probably not the right answer:
Check out this article. It presents a great solution that allows you to write things like that: