На этот вопрос есть несколько ответов о том, как определить, является ли тип блитабильным или нет.Однако все они, похоже, полагаются на GCHandle.Alloc, который выдает исключение для неблизких типов.Тем не менее, на Mono, это не делает .
Я экспериментировал с кучей различных альтернатив, чтобы определить, является ли тип молниеносным или нет, например, пытается проверитьесли Marshal.OffsetOf возвращает то же смещение, что и при использовании небезопасных указателей для вычисления смещений полей, однако я не смог выяснить, как найти управляемые смещения полей, не связываясь с внешними инструментами, такими как SharpUitls.
Для контекста,У меня есть некоторый код, который анализирует заголовки C и генерирует (мы надеемся) легкомысленные структуры C # из них.Я хочу написать автоматический тест, чтобы быть уверенным, что типы являются легковесными.Я использую отражение, чтобы найти сгенерированные типы для теста.