Как уже отмечали другие, да, преобразование структуры в интерфейс, который она реализует, является броском бокса. Важнее не то, каков ответ на вопрос, а то, что вы сможете ответить на него самостоятельно. Если вы используете ILDASM для дизассемблирования тестового приложения, вы увидите, что инструкция «box» генерируется компилятором в точке преобразования. Теперь в следующий раз, когда у вас возникнет вопрос о боксе, вы можете просто написать себе тестовую программу, разобрать ее, и тогда вы узнаете.
Кстати, обратите внимание, что бокс НЕ происходит, если вы вызываете метод неявно реализованного метода интерфейса для структуры:
struct S : IFoo { public void Foo() { ...
...
myS.Foo(); // no boxing
((IFoo)myS).Foo(); // boxing
Это особенно актуально для методов интерфейса в типах изменяемых значений; помните, если вы изменяете тип значения в штучной упаковке, то вы изменяете значение в блоке, а не переменную, которая изначально содержала значение в штучной упаковке. Тот факт, что myS.Foo () и ((IFoo) myS) .oo () могут иметь различную семантику, является еще одной причиной, по которой изменяемые типы значений являются чистым злом и их следует избегать.