December 10, 2010 String to enum | ||||
---|---|---|---|---|
| ||||
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. |
December 10, 2010 Re: String to enum | ||||
---|---|---|---|---|
| ||||
Posted in reply to useo | 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.
|
Copyright © 1999-2021 by the D Language Foundation