C#, эквивалентный объединению C [дубликат]

Это может помочь вам понять, что вы можете сделать ...

function getModify(string) {
    return (string=="")?('N/A'):(string);
}
console.log(getww(""));
console.log(getww("ub"));

// Output
// N/A
// ub
5
задан Community 23 May 2017 в 11:48
поделиться

3 ответа

C # не поддерживает ' t изначально поддерживает понятие объединений C / C ++. Однако вы можете использовать атрибуты StructLayout (LayoutKind.Explicit) и FieldOffset для создания эквивалентной функциональности. Обратите внимание, что это работает только для примитивных типов, таких как int и float.

using System;
using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Explicit)]
struct byte_array
{
    [FieldOffset(0)]
    public byte byte1;

    [FieldOffset(1)]
    public byte byte2;

    [FieldOffset(2)]
    public byte byte3;

    [FieldOffset(3)]
    public byte byte4;

    [FieldOffset(0)]
    public short int1;

    [FieldOffset(2)]
    public short int2;
}
5
ответ дан 14 December 2019 в 08:59
поделиться

Используя атрибут StructLayout , это будет выглядеть примерно так:

    [StructLayout(LayoutKind.Explicit, Pack=1)]
    public struct ByteArrayUnion
    {
        #region Byte Fields union

        [FieldOffset(0)]
        public byte Byte1;

        [FieldOffset(1)]
        public byte Byte2;

        [FieldOffset(2)]
        public byte Byte3;

        [FieldOffset(3)]
        public byte Byte4;

        #endregion

        #region Int Field union

        [FieldOffset(0)]
        public int Int1;

        [FieldOffset(4)]
        public int Int2;

        #endregion
    }
1
ответ дан 14 December 2019 в 08:59
поделиться

В вашем вопросе не указано, какова ваша цель. Если вы хотите упорядочить данные для вызова pinvoke, тогда 2 приведенных выше ответа верны.

Если нет, то просто выполните:

class Foo
{
  object bar;
  public int Bar {get {return (int)bar; } }
  ...
}
1
ответ дан 14 December 2019 в 08:59
поделиться
Другие вопросы по тегам:

Похожие вопросы: