Using exceptions for testing types makes debugging issues very difficult as you can't just break on all exceptions. In some cases this may be the only way, but the framework gives a "Is" function that should do this test for you. Can the code be switched to use the IsGenericTypeDefinition function?
I like to follow the saying "Only use exceptions in exceptional situations"

