Thread overview | ||||||
---|---|---|---|---|---|---|
|
September 25, 2015 Can I check if a value is convertible to a valid value of an enum? | ||||
---|---|---|---|---|
| ||||
...without having to loop over the enum? enum SomeType : string { CHEESE = "cheese", POTATO = "potato" } string valid_value = "cheese"; string invalid_value = "pizza"; bool test( string value ){ if( value.isConvertableToSomeType ){ // this be the magic I seek //do something return true; } return false; } void main(){ writeln( test( valid_value ) ); //prints true writeln( test( invalid_value ) ); //prints false } Or would I need to foreach over the enum somehow? |
September 25, 2015 Re: Can I check if a value is convertible to a valid value of an enum? | ||||
---|---|---|---|---|
| ||||
Posted in reply to French Football | On Friday, 25 September 2015 at 03:12:20 UTC, French Football wrote:
> ...without having to loop over the enum?
> writeln( test( valid_value ) ); //prints true
Since `value` is known only at run time, some checks need to be performed at run time anyway. One way of doing it without iterating over all variants is to create a static hash table
bool[string] valid_strings;
and populate it in static constructor, then in your function you can just write
if (value in valid_strings) ...
|
September 25, 2015 Re: Can I check if a value is convertible to a valid value of an enum? | ||||
---|---|---|---|---|
| ||||
Posted in reply to French Football | On Friday, 25 September 2015 at 03:12:20 UTC, French Football wrote: > ...without having to loop over the enum? > > enum SomeType : string { CHEESE = "cheese", POTATO = "potato" } > string valid_value = "cheese"; > string invalid_value = "pizza"; > > bool test( string value ){ > if( value.isConvertableToSomeType ){ // this be the magic I seek > //do something > return true; > } > return false; > } > > void main(){ > writeln( test( valid_value ) ); //prints true > writeln( test( invalid_value ) ); //prints false > } > > Or would I need to foreach over the enum somehow? find + EnumMembers should do the trick if ( (EnumMembers!SomeType).canFind(value)) { // ... } |
September 25, 2015 Re: Can I check if a value is convertible to a valid value of an enum? | ||||
---|---|---|---|---|
| ||||
Posted in reply to Nicholas Wilson | On Friday, 25 September 2015 at 03:20:24 UTC, Nicholas Wilson wrote: > find + EnumMembers should do the trick > if ( (EnumMembers!SomeType).canFind(value)) > { > // ... > } Should be if (only(EnumMembers!SomeType).canFind(value)) { //... } |
Copyright © 1999-2021 by the D Language Foundation