Я только что проверил это в VisualStudio 2008 с использованием C # и получил ожидаемый результат (1, 2).
Попробуйте опубликовать пример кода, с которым у вас возникли проблемы.
РЕДАКТИРОВАТЬ Вот почему пример кода может быть плохим;)
Ваша проблема была с StructLayout.Explicit
на Anonymous1
. Есть ли конкретная причина, по которой
- Вы сделали явное вместо последовательного и расположили их в нужном вам порядке
- Вы оставили индексы равными 0 для всех из них
Когда я изменил его на Sequential
и удалил атрибуты, он работал нормально для меня.
РЕДАКТИРОВАТЬ 2 (удалено)
РЕДАКТИРОВАТЬ 3
Ваша проблема с заданием в конструкторе. Не уверен, как я это пропустил. Вам не нужно устанавливать все эти переменные, потому что ваш атрибут FieldOffset
хранит их все в одном месте. Сама структура занимает только 4 байта памяти (теоретически, во всяком случае). Получаете ли вы доступ к нему через int
, byte
s или через два short
s, все они идут в одно и то же место. В результате ваши первые два набора назначений (int
и byte
s) являются избыточными, а последний набор (для short
s, устанавливающий их в 0) удаляет то, что вы только что сделали.
К сожалению, компилятор C # не знает этого, поэтому я уверен, что вы добавили последнее назначение, потому что он жаловался на то, что структура не была полностью назначена. Сначала добавьте фиктивные назначения для short
s и int
, затем явным образом назначьте byte
s из массива.