Biggest Smiles answer is great!
To add my own contribution to this discussion: your question answers itself right here:
"I am writing a core functionality to an item system in the game,"
Core functionality = very very important
= you need to think long term
= you need to maximize the flexibility of your system 2 years down the line
= you should leverage UE4’s awesome available systems
= expect to need future compatibility for display / editing / saving in blueprints
= you should leverage all the hard work UE4 engineers have done with UEnum because they obviously felt it is very useful in real game projects
= unless there’s some extreme cost to UEnum, which there isn’t, there is no point in dropping all of the above advantages for the sake of… well I am not sure really, since we are really talking about a uint8 = a byte, = a very very small amount of data even in network code
But think big!
Core game code functionality should be as flexible as possible for all future possible needs!
You are not losing anything by using UEnum, and you are gaining the ability to leverage all the work Epic engineers have done, and might do in the future with UEnum to make it even more powerful than it already is!
And in 4.3, we have switch on enum built into the output of every node!
You can just return your EnumAsByte and there will be option to expand all of the values for the enum = every node has switch on enum now!
Rama
PS: and when you save data for your game to compressed binary files, UEnum is tiny