2009-07-23 8 views
2

Gibt es eine Möglichkeit, ein Feld in die berechnete der Struktur Größe zu ignorieren mit Marshal.SizeOfWie ignoriere ich eine Feldgröße in einer Struktur mit Marshal.SizeOf?

Ex:

public struct Message 
{ 
    public ushort X; 
    public ushort Y; // Ignore this field in the calculation 
} 

int size = Marshal.SizeOf(typeof(Message)); 

Gerade jetzt Größe 4. Ich möchte die Größe 2. sein gibt es eine Möglichkeit, dies zu tun?

+0

Eine Union wäre, wenn ich explizit die Feld Offsets auf die gleiche setzen (C# hat Gewerkschaften), möchte ich das nicht tun. – SwDevMan81

+0

Ich denke, du musst erklären, warum du das willst, damit wir dir helfen können. Wenn Sie nur wollen, dass es "2" ist, dann ersetzen Sie es durch eine literale 2? Oder übergeben Sie einfach typeof (ushort) an den Aufruf marshal.sizeof(). –

Antwort

2

Die einzige Möglichkeit, die ich mir vorstellen könnte, wäre eine Custom Marshaller erstellen und wenn Sie ICustomMarshaller implementieren. GetNativeDataSize, return 0. Sie würden MarshalAsAttribute verwenden, um den benutzerdefinierten Marshaller nur auf dieses Feld anzuwenden. Aber es wird nicht richtig marshallen, also weiß ich nicht, warum du das machen willst.

0

Ich glaube nicht, dass das möglich ist. Warum willst du das machen?