# IT:AD:Patterns:Enums Start with Undefined Strategy #
* [[../|(UP)]]
{{indexmenu>.#2|nsort tsort}}
## Process ##
Consider
public enum Gender{
Male =1,
Female =2
}
Much as you don't want to admit it...zero's are a common source of bugs. So if your code somehow ends up setting a property to:
person.Gender= (Gender)0
You'll be surprised to know that it won't complain, even if 0 is not a member of the enum list.
The only way that you can Validate such a scenario is by doing something like the following.
public static void Validate(this Person person){
if ( ((int)person.Gender) == 0){throw ....}
}
which of course nobody will do (as they'll be thinking about using the enum, not the unitituive int).
So just account for the use of a zero getting in there somehow. Put it at the beginning of the enum:
public enum Gender{
Undefined=0
Male =1,
Female =2
}
Now you can test for it.
public static void Validate(this Person person){
if (person.Gender == Gender.Undefined){throw ....}
}
While you're at it, you might as well consider whether there is such a case as Unknown. In which case, give it a value of 1:
public enum Gender{
Undefined=0,
Unknown=1,
Male =2,
Female =3,
}
Now it's clearer.