Enum with methods for functionality (Combine Class / Enum)

If you don’t mind a little more writing you can make extension methods to expand the interface of the enum.

e.g.

public enum TimeUnit
{
   Second,
   Minute,
   Hour,
   Day,
   Year,
   /* etc */
}
public static class TimeUnitExtensions
{
    public static long InTicks(this TimeUnit myUnit)
    {
         switch(myUnit)
         {
           case TimeUnit.Second:
               return TimeSpan.TicksPerSecond;
           case TimeUnit.Minute:
               return TimeSpan.TicksPerMinute;
            /* etc */
         }
    }
}

This can add “instance” methods to your enums. It’s a bit more verbose than mostly liked, though.

Remember though that an enum should be treated mostly as a named value.

Leave a Comment