Возможные дубликаты:
Зачем нам нужен бокс и распаковка на С#?
Что такое бокс и распаковка и какие компромиссы?
В С# то, что означает сидение, означает: "Box и UnBox"?
Здесь выдержка из MSDN, где я основал текст.
Но это удобство стоит дорого. Любой тип ссылки или значения, который добавлено в ArrayList, неявно upcast для Object. Если элементы типы значений, они должны быть в коробке, когда они добавляются в список и unboxed при их восстановлении. И то и другое кастинг и бокс и уменьшение количества операций распаковки представление; эффект бокса и unboxing может быть очень значительным в сценарии, в которых необходимо перебрать большие коллекции.
Спасибо!