Making things into enums that shouldn't be enums is a fun trap to fall into. Much of the time what you really want is a complex type so that you can communicate these additional facts. In this case I'd do something like:
class Widget
{
WidgetFlavor Flavor; //Undefined, Vanilla, Chocolate, Strawberry
string? OtherFlavor;
}
This is easy to work from a consumer standpoint because if you have a deviant flavor to specify, you don't bother setting the Flavor member to anything at all. You just set OtherFlavor. Fewer moving pieces == less chance for bad times.The first (default) member in an enum should generally be something approximating "Undefined". This also makes working with serializers and databases easier.