Для структур в подобном коде надо вначале сделать box, а потом callvirt.
Я уже показывал, что ((IDisposable)myStruct).Dispose() приводит именно к боксу и callvirt, а не constrained + Dispose
для стуктур, чтобы вызвать метод интерфейса, который у неё точно есть используется constrained (для tostring, gethsashcode, длядженерик кода) + call virt