Ich habe folgende Strukturen definiert, um eine C ++ - Union zu emulieren (die schließlich für C ++ Interop verwendet wird):
%Vor% Ich habe den folgenden Testcode geschrieben, der Struct1.guid
einen Wert zuweist und auf Struct2.guid
auf Gleichheit testet:
Warum ist Struct2.guid
nicht gleich Struct1.guid
und stattdessen scheint sich ein Segment von Struct2.guid
in Struct2.integer
zu verschieben? Alle Strukturelemente, IMO, scheinen ausgerichtet zu sein.
LayoutKind.Sequential
wirkt sich nur auf die nicht verwaltete Darstellung dieser Struktur aus. Dies liegt daran, dass die Struktur nicht blitable Typen (Strings) enthält.
Wenn nur Bleitypen vorhanden wären, würde LayoutKind.Sequential
sowohl die verwaltete als auch die nicht verwaltete Darstellung steuern ( Referenz ).
In Ihrem Fall entscheidet der Compiler, die Ganzzahl vor die beiden Zeichenfolgen in der verwalteten Darstellung zu setzen (Sie können sehen, dass wenn Sie beim Debuggen ms
und STRUCT2
entfalten).
Sie können das beheben, indem Sie LayoutKind.Explicit
sowohl in STRUCT1
als auch in STRUCT2
verwenden, da Explicit
sowohl gemanagte als auch nicht verwaltete Darstellungen sowohl für blitable als auch nicht-blitable Typen betrifft.