Без ограничений T приведение к object/интерфейсу может боксить value type; constraints и typed collections устраняют это.
Разбор
- where T : struct/class/интерфейс направляет компилятор.
- List не боксит, ArrayList — боксит.
- Смотрите alloc profiler.
- Интерфейсный вызов на struct без generic иногда боксит.
Итог
Constraints и typed collections убирают лишний boxing.