Well sure, I’ve been using “is” alongside switch statements for a while now but admittedly doesn’t come up too often. Let’s say you have a ControlTemplate that’s so deep in the stack you have to pull symbols for it yet most of the properties are inaccessible in the current scope. The only thing it will spit out which is accessible at runtime is the type. The requirement is to process the data correctly (e.g. transform it into a List<T> or custom object). You could either write GetType() all over the place and attempt to access this mega-object at runtime or just use a switch statement to determine the resulting type with “is”. The situation I was in where this became preferable was an application where the user picks the controls themselves (a form builder with fancy controls) which has the ability to add 3rd party controls from different libraries. It reminded me of throwing darts blindfolded- case target is bullseye: try { throw.dart; } catch(Exception ouch) { LogThrows(“you probably don’t want to catch this”, ouch); } break;