Realmente no puede decidir cómo lidiar con esto sin saber algo sobre cómo se usa. Si simplemente se usa para ahorrar espacio, entonces puedes ignorarlo y simplemente usar una estructura.
Sin embargo, esa no es la razón por la cual se utilizan uniones. Hay dos razones comunes para usarlos. Una es proporcionar 2 o más formas de acceder a los mismos datos. Por ejemplo, una unión de un int y una matriz de 4 bytes es una (de muchas) maneras de separar los bytes de un entero de 32 bits.
La otra es cuando los datos en la estructura provienen de una fuente externa, como un paquete de datos de red. Por lo general, un elemento de la estructura que contiene la unión es una identificación que le indica qué sabor de la unión está vigente.
En ninguno de estos casos puede ignorar ciegamente la unión y convertirla a una estructura donde los dos (o más) campos no coinciden.
Puede ser más seguro, pero cuando se interactúa con las bibliotecas C que proporcionan este tipo de estructuras de datos, esta decisión en C# rompe incluso la encapsulación rudimentaria de sus estructuras C/C++. Estoy tratando de lidiar con algo como esto: struct LibrarySType {AnotherType * anotherTypeBuff; int oneSetOfFlags; int anotherSetOfFlags; union {struct {int structMember1; ...} oneUseOfThisLibraryType; struct {char * structMember2; ...} anotherUseOfThisLibraryType; ...} u; int64 * moreStuff; ...entiendes} Ahora no inventé esta estructura de datos inteligente, pero es parte de una API de proveedor Necesito –