Yes, I am trying to make an enum of entries with string values.
Unfortunately, this won't work, as CSharp only allows numeric values in enums.
When you try to do this, you get: error CS0029: Cannot implicitly convert type 'string' to 'int'.
If I try to define the enum's type, I get: error CS1008: Type byte, sbyte, short, ushort, int, uint, long, or ulong expected.
Apparently you can parse the enum value names into strings as shown in this example from the MSDN doc you've linked. You could then try extracting them and putting them into an array or something similar. There are some minor inconveniences involved (it'd be good to make a wrapper for it / add some helper methods).
Edit: just to clarify, the enum values still aren't of type string, but it's possible to indirectly use them as such.
Edit 2: have you considered using HashMaps or something similar instead? There's more overhead to them (an overkill for using them as constant enum values) but it might be what you're looking for if you'd like to dynamically insert data. I don't know in what context you're going to be using these so I can't say for sure.
I'm making a command-line interface, and I have a list of commands.
I want to use a list of command strings to generate an enum.
Why do this when you have the list?
Because this:
switch(cmd){caseCOMMANDS[0]:/* ... */}
It throws an error that the case isn't constant (as I GUESS it should rightfully do so), therefore, I need to manually right all of the commands down again.
In the example, there's a dictionary containing all available commands. Each command implements the ICommand interface (and the Execute() method, which gets executed by the while loop in Main). You can add fields to the ICommand interface to store the command's name or usage description if you want.
This doesn't directly answer your question but hopefully helps in some way.
Doesn't making a new class for every command seem bloated?
Otherwise, this does help.
It's actually advisable because it makes adding new functionality / commands easier and the code is more readable/easier to maintain. The performance impact is minimal (C# is really good at optimizations).
For further actions, you may consider blocking this person and/or reporting abuse
We're a place where coders share, stay up-to-date and grow their careers.
Yes, I am trying to make an enum of entries with string values.
Unfortunately, this won't work, as CSharp only allows numeric values in
enum
s.When you try to do this, you get:
error CS0029: Cannot implicitly convert type 'string' to 'int'
.If I try to define the
enum
's type, I get:error CS1008: Type byte, sbyte, short, ushort, int, uint, long, or ulong expected
.You can refer to the docs here (Enumeration types - C# reference | Microsoft Docs).
Apparently you can parse the enum value names into strings as shown in this example from the MSDN doc you've linked. You could then try extracting them and putting them into an array or something similar. There are some minor inconveniences involved (it'd be good to make a wrapper for it / add some helper methods).
Edit: just to clarify, the enum values still aren't of type
string
, but it's possible to indirectly use them as such.Edit 2: have you considered using HashMaps or something similar instead? There's more overhead to them (an overkill for using them as constant enum values) but it might be what you're looking for if you'd like to dynamically insert data. I don't know in what context you're going to be using these so I can't say for sure.
I'm making a command-line interface, and I have a list of commands.
I want to use a list of command strings to generate an enum.
Why do this when you have the list?
Because this:
It throws an error that the case isn't constant (as I GUESS it should rightfully do so), therefore, I need to manually right all of the commands down again.
Ah, this makes sense. Since it won't let you use plain string arrays, you could try a more OOP approach using Dictionaries and custom command classes.
In the example, there's a dictionary containing all available commands. Each command implements the ICommand interface (and the
Execute()
method, which gets executed by thewhile
loop inMain
). You can add fields to the ICommand interface to store the command's name or usage description if you want.This doesn't directly answer your question but hopefully helps in some way.
Doesn't making a new class for every command seem bloated?
Otherwise, this does help.
Thanks for the help.
Is there a way I can convert all the
String
constants of a class to aString[]
?It's actually advisable because it makes adding new functionality / commands easier and the code is more readable/easier to maintain. The performance impact is minimal (C# is really good at optimizations).