Best way to do a discriminated union struct - C#