Из общего ограничения я знаю, что у объекта деталей должен быть базовый класс BaseDetails
Это известно в процессе компиляции в байт-код (я имею в виду, Visual Studio это знает)
и из фактического универсального параметра я знаю точный производный тип
Но это известно только после JIT-компиляции (Visual Studio ничего об этом не знает). Это как поздний переплет.
Поэтому, если вы хотите написать один класс валидатора с несколькими методами с разными типами аргументов, вы не сможете этого сделать, потому что компилятор Visual Studio не знал (во время компиляции), какой метод будет вызван.
Я считаю, что нет способов пропустить написание логики 'switch (typeof (TDetails)) ", где валидатор должен быть выбран TDetails. Так что вы должны написать какую-то фабрику, как Сэм Холдер писал выше.
PS: простите за мой английский. Я использую stackoverflow также для изучения английского языка:)