Serikat terdiskriminasi di C #

[Catatan: Pertanyaan ini memiliki judul asli " C (ish) style union in C # " tetapi seperti yang diberitahukan oleh Jeff, struktur ini disebut 'union yang terdiskriminasi'] Maafkan verbositas pertanyaan ini. Ada beberapa pertanyaan serupa yang sudah saya miliki di SO tetapi tampaknya...