65.9K
CodeProject is changing. Read more.
Home

Toggle Enum Values of an Enum Variable

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.67/5 (5 votes)

Sep 19, 2014

CPOL
viewsIcon

18829

Toggle between enum values of an enum variable

Introduction

This tip shows you how to toggle between enum values of an enum variable.

Background

Let's take an enum example:

 enum Day
        {
            Sunday, Monday, Tuesday, Wednesday, Thursday, Friday, Saturday
        }
        Day day = Day.Sunday;
        private void Toggle()
        { 
            //Now, if you want to toggle values of the enum variable day what would you do?
            //generally if of switch statement is used like this 
            if (day == Day.Sunday)
                day = Day.Monday;
            else if (day == Day.Monday)
                day = Day.Tuesday;
            else if (day == Day.Tuesday)
                day = Day.Wednesday;
            else if (day == Day.Wednesday)
                day = Day.Thursday;
            else if (day == Day.Thursday)
                day = Day.Friday;
            else if (day == Day.Friday)
                day = Day.Saturday;
            else if (day == Day.Saturday)
                day = Day.Sunday;}

This method is only feasible when enum has few members (7 in this case). There is an easy way and it can also be feasible when enum has more members than usual.

Using the Code

 private void Toggle<T>(ref  T obj)
        {
            List<string> types = Enum.GetNames(obj.GetType()).ToList();
            int index = types.IndexOf(obj.ToString());
            if (index == types.Count - 1)
                index = 0;
            else
                index++;
            string nextstring = types[index];
            Type type = obj.GetType();
            object selected = Enum.Parse(obj.GetType(), nextstring);
            obj = (T)selected;
        }
        //Example 
        private void ChangeEnumValue()
        {
            Toggle<Day>(ref day);
        }