On 4/21/20 12:03 PM, Russel Winder wrote:
Hi,

Given an enum:

enum ZoneNumber {
     One = 1,
     Two = 2,
}

then which of these is the right way of accessing the value?

cast(ubyte)ZoneNumber.One
to!ubyte(ZoneNumber.One)

I generally do this:

ubyte(ZoneNumber.One)


conversely what is the right way of going the other way:

cast(ZoneNumber)1

This will incur zero runtime cost, so I would recommend that.

to!ZoneNumber(1)

This works too, I think it just does the equivalent of the first, but if not inlined, you will incur some runtime cost.


I tried:

enum ZoneNumber : ubyte {
     One = 1,
     Two = 2,
}

but the members One and Two still seem to be types as int. :-(
They are typed as ZoneNumber, which is a derivative of ubyte. What measurement are you doing to determine that they are int?

auto x = ZoneNumber.One;
ubyte y = x; // fine

If you leave off the :ubyte part, the declaration of y would fail.

Similarly, this would fail:

enum ZoneMember : ubyte {
   One = 1,
   Two = 2,
ThreeThousand = 3000, // Error: cannot implicitly convert expression 3000 of type int to ubyte
}

-Steve

Reply via email to