Using an enum as an optional parameter

El Kabong picture El Kabong · Feb 7, 2014 · Viewed 22.6k times · Source

I have several methods in an application I'm working on loaded with optional parameters, some of which are enums. Currently, in order to do that I'm writing methods with a similar type of signature:

public void SomeMethod(string myFirstParam = "", string mySecondParam = "", MyEnum myThirdParam = (MyEnum )(-1)){

     if (myThirdParam != (MyEnum ) (-1))
     {
          //do something with it
     }
}

So my first question is, is there some pitfall to this approach I haven't realized, but in time will become painfully aware of, and secondly, is there a more proper - or at least elegant solution to it?

I should say that we control the input to this method, it's used internally, so I'm not worried about someone casting in a value of -1 to gum up the works.

Answer

JleruOHeP picture JleruOHeP · Feb 7, 2014

I would suggest using nullable enum in this situation, like this:

public void SomeMethod(string myFirstParam = "", 
                       string mySecondParam = "", 
                       MyEnum? myThirdParam = null)
{
   if (myThirdParam.HasValue)
   {
      var enumValue = myThirdParam.Value;
      //do something with it
   }
}

and you can use it like this:

SomeMethod(myThirdParam: MyEnum.Something);