Enum conversion
tsbockman
thomas.bockman at gmail.com
Tue Apr 21 18:09:59 UTC 2020
On Tuesday, 21 April 2020 at 16:03:20 UTC, Russel Winder wrote:
> then which of these is the right way of accessing the value?
>
> cast(ubyte)ZoneNumber.One
> to!ubyte(ZoneNumber.One)
Either is acceptable because there is no way that this operation
can fail. Using a naked `cast` makes less work for the compiler
and performs optimally with or without inlining, though.
> conversely what is the right way of going the other way:
>
> cast(ZoneNumber)1
> to!ZoneNumber(1)
Use `to` except where you can gaurantee that the input value maps
to a valid enum member, because `cast` does not check your work:
writeln(cast(ZoneNumber)17); // breaks the type system
writeln(to!ZoneNumber(17)); // throws a ConvException: Value
(17) does not match any member value of enum 'ZoneNumber'
So, `cast` is faster, but unsafe. `to` is slower, but protects
the enum's invariant.
More information about the Digitalmars-d-learn
mailing list