It’s interesting that so many people independently pick the name IfNotNull
, for this in C# – it must be the most sensible name possible! 🙂
Earliest one I’ve found on SO: Possible pitfalls of using this (extension method based) shorthand
My one (in ignorance of the above): Pipe forwards in C#
Another more recent example: How to check for nulls in a deep lambda expression?
There are a couple of reasons why the IfNotNull
extension method may be unpopular.
-
Some people are adamant that an extension method should throw an exception if its
this
parameter isnull
. I disagree if the method name makes it clear. -
Extensions that apply too broadly will tend to clutter up the auto-completion menu. This can be avoided by proper use of namespaces so they don’t annoy people who don’t want them, however.
I’ve played around with the IEnumerable
approach also, just as an experiment to see how many things I could twist to fit the Linq keywords, but I think the end result is less readable than either the IfNotNull
chaining or the raw imperative code.
I’ve ended up with a simple self-contained Maybe
class with one static method (not an extension method) and that works very nicely for me. But then, I work with a small team, and my next most senior colleague is interested in functional programming and lambdas and so on, so he isn’t put off by it.