The Exception is a convenient container, that is tempting to use for various purposes. But is it OK to use it for handling legal states in your code?
My example: I have a geometric function that finds the closest object within a search radius:
public IPoint FindNearest(IPoint origin, double searchRadius)
{
}
My idea was that I could throw an exception, when the search doesn’t find a hit. But is this a good idea? Alternatively, I could return Null (which I don’t like), or return a result object instead of a Point.
Usually in this situation throwing exceptions isn’t a good idea, they are expensive and semantically mean something else entirely.
You could return null and do a null check, or I occasionally find that using the Special Case pattern works out nicely and makes for readable code if you give the class/interface a sensible name.
In this instance, you’d return either an implementing class or derived interface called something like:
And return that from the call when you get no hits. Then the calling code checks the return type:
Although in this specific situation I’d likely go with the
TryFindNearestsemantics (to keep commonality with the likes ofTryParseetc) that RobH suggests.