Type Unions for C#

Quirin Schroll qs.il.paperinik at gmail.com
Tue Aug 6 15:15:00 UTC 2024


On Saturday, 3 August 2024 at 11:59:29 UTC, harakim wrote:
> Java enums are the only feature that of Java I like better than 
> C#. An enum, in my mind, should be a list of all possible 
> values. That falls flat in C# because you can have someting 
> like this
> ```enum Animal { Dog = 1, Cat = 2 };
> Animal a = (Animal)200;
> ```
> and it compiles just fine. I have had a lot of trouble with 
> that when deserializing data. Also, he is right that you can't 
> say int b = a switch { Animal.Dog => 1; Animal.Cat => 2 } 
> because the enum provides no guarantees about what will be 
> stored.
>
> Enums that guarantee it is one of many values are great. They 
> simplify code so much. C# enums are like missing type safety 
> compared to Java. I have even seen Java enums used for strategy 
> pattern, where you store the name in the database and then it 
> loads the enum without explicit reflection. It made me double 
> take at first, but turned out to be awesome.

That is because in Java, enum values are actually objects, 
whereas in C# (like in C, C++, and usually in D), enum values are 
integers. (In D, enum values can have any type.)

You can emulate Java enums (to some degree) in D using a struct 
and `static immutable` values.


More information about the Digitalmars-d mailing list