ИИ для программиста?
Вобщем, на Шарпе эта задача оповещения до выполнения кода, что нужно добавить реализацию, не решаема. Нужны внешние инструменты, типа анализаторов кода. Интерфейс не гарантирует, что его не реализует какой-то другой тип, который не должен поддерживаться. И не гарантирует, что новый тип будет с этим интерфейсом (это только декларативно - через инструкцию для программиста).
А грязным кодом - это в дженерик методе перебирать все типы, которые реализуют интерфейс, и вызывать разный код для каждого такого типа. Если встретится тип, который нам не нужен - просто для него не будет кейса. А если который нужен, но мы о нём в данном месте ещё не знаем, что он написан, то никак. В принципе, всё то же самое, что и при просто перегруженном обычном методе, не дженерике. Только перегрузка это чистый код, а ветвление по типу в дженерике - грязный.