Структура, которая реализует интерфейс, будет упакована, если она приведена к интерфейсу, но не если она приведена к универсальному типу, который ограничен для реализации интерфейса. Например:
void Compare<T>(T thing1, T Thing2) where T:IComparable<T>
{
return thing1.CompareTo(Thing2);
}
Обратите внимание, что, хотя в приведенном выше коде при использовании структур избегается упаковка, сравнение двух объектов типа значения T потребует трех операций копирования. Если бы параметры передавались по ссылке, а не по значению, производительность с типами значений была бы улучшена за счет снижения производительности ссылочного типа (и, конечно, совместимости с существующими IComparable и IComparer ).