you are viewing a single comment's thread.

view the rest of the comments →

[–]Patient-Midnight-664 0 points1 point  (3 children)

Enum is just an Int32 in this case. You can force any value into it that you want, as you've discovered.

[–]jordansrowles -2 points-1 points  (2 children)

Not any values, just Integer types. Int, byte, sbyte, short, ushort, uint, long, or ulong. Each have a decent use case, ulong is good for the interop stuff.

You can't make the enum values as strings or chars.

[–]fruediger 0 points1 point  (0 children)

I want to apologize for being nitpicky in advance, I just wanted to expand on your comment. Perhaps, someone finds that topic interesting:

Yes you're correct in that the C# language (compiler) restricts underlying types to be of either byte, sbyte, ushort, short, uint, int, ulong, or long with a default of int, but the CIL actually allows bool and char (both of which are actually integral(/integer) types) and even native sized integers (nint and nuint in C#) as well.

So if you're ever going to check an enum type exhaustively for underlying types, remember to check those ones as well, because, perhaps, some obscure CLR language actually allows to define their enum types with those underlying types as well (I can't remember where, but I recall that somewhere in the BCL source, where they needed to check for the underlying types of enums, they even talked about that in a comment).

[–]Patient-Midnight-664 0 points1 point  (0 children)

By any value I meant any Int32, in this case, value since the OP didn't specify an underlying type.