Несколько путей.
, не определяя тип должен иметь конструктора:
T obj = default(T); //which will produce null for reference types
С конструктором:
T obj = new T();
, Но это требует пункта:
where T : new()
На этой странице указано количество типов (40513 в 3.5SP1) - действительно ли для вас важно различать классы и структуры / перечисления / интерфейсы?
Я ожидал бы подавляющего большинства из этих 40K + быть классами, поэтому ваша цифра 6000 очень консервативна.
Учитывая список сборок, очень легко вычислить количество классов:
int classes = assemblies.GetTypes()
.Where(t => t.IsClass)
.Count();
Предполагается, что вы хотите всех классов хотя - вас на самом деле интересуют только общедоступные классы?
int classes = assemblies.GetTypes()
.Where(t => t.IsClass && t.IsPublic)
.Count();