String to enum

Jesse Phillips jessekphillips+D at gmail.com
Fri Dec 10 10:04:20 PST 2010


useo Wrote:

> Hi,
> 
> does anyone know how I can cast a string to an enum which also
> contains strings? For example:
> 
> enum MyENUM : string {
> 
> x = "123"
> y = "456"
> z = "789"
> 
> }
> 
> ...
> 
> string myString = X;
> to!(MyENUM)(myString); //  Error: cannot implicitly convert
> expression (_adDupT((& D12TypeInfo_Aya6__initZ),s)) of char[]...
> cast(MyENUM) myString; // Does work, but it seems that other values
> like MyENUM.a, MyENUM.b... are also successfully casted to MyENUM but
> MyENUM doesn't contain a, b or similiar invalid/undefined values.
> 
> I hope anyone can solve the problem... thanks.

You should get a compiler error for using MyENUM.b if it doesn't exist.

Casting is the correct way to do conversion, but as you are aware this doesn't guarantee that it is within the Enum.

You can use a switch statement and throw an exception in the default.

I am looking at ways to improve to! such that it can do more and is safer than cast. After the new year I'll probably have more time to look at building my proposed changes and I think this is a good one to add to the list.


More information about the Digitalmars-d-learn mailing list