Исходя из характера вашего вопроса, я предполагаю, что ваше ClassName не полагается на какие-либо методы в Identifiable, которые требуют TId (в противном случае вам потребуется тип.) В этом случае, одним из распространенных решений в этом случае являетсясоздать неуниверсальный базовый интерфейс со всеми методами, для которых не требуется тип TId.Тогда у вас есть:
interface Identifiable<TId> : Identifiable //Not a standard interface name, btw
, и ваше ограничение становится:
public class ClassName<T> where T : Identifiable
Предполагая, что вам действительно нужен тип TId, но вы просто хотите упростить синтаксис конструкции,Один из вариантов, если ваш конструктор использует экземпляр Identifiable (например, Person в вашем примере), это изменить конструктор на фабричный метод:
public static ClassName<T, TId> FromIdentifiable<T,TId>(T identifiable) where T: Identifiable<TId>
Вышеприведенное должно позволить компилятору выводить типыи дать вам более короткий синтаксис, основанный на типе параметра.