t
- это экземпляр объекта типа Type
, то есть тот, который существует только во время выполнения. Обобщения работают во время компиляции и ожидают имя типа.
Я думаю, вы согласны с тем, что следующее не имеет смысла:
Type t = thing.GetType()
TypeOfThing instance = new t();
И по той же причине вы не можете передать экземпляр типа в качестве параметра универсального.