Creating Dynamic Enums using C#

Additional code needed to enable generic enums to have new members added dynamically.

Further to my article about creating generic enums using C# (http://www.c-sharpcorner.com/UploadFile/b942f9/9555/) and a response from Suthish Nair, the following code needs to be added to the GenericEnum base class to enable new members to be added dynamically.

I didn't think it was a good idea to allow for removal of members already added because this could upset instances which had already been created in the same session.


    private static int dynamicCount;

    public static int DynamicCount
    {
        get { return dynamicCount; }
    }

    public static void DynamicAdd(string name, U value)
    {
        if (names.IndexOf(name) == -1)
        {
            names.Add(name);
            values.Add(value);
            dynamicCount++;
        }
        else
        {
            throw new InvalidOperationException(String.Format("'{0}' is already an element of {1}", name, typeof(T).Name));
        }
    }

Finally, here's some sample code to test the above:

class Test
{
   static void Main()
   {
      Console.Clear();

      Fractions f = Fractions.ByName("Sixth");
      Console.WriteLine(f); // Sixth      
      Fractions.DynamicAdd("Seventh", 1.0/7.0);
      Fractions.DynamicAdd("Eighth", 0.125);
      Console.WriteLine(f); // Sixth (unchanged)
      f = Fractions.ByName("Seventh");
      Console.WriteLine(f); // Seventh
      Console.WriteLine(f.Value.ToString("F4")); // 0.1429
      Console.WriteLine(f.Index); // 5
      f = Fractions.ByValue(0.125);
      Console.WriteLine(f); // Eighth 
      Console.WriteLine(Fractions.Count); // 7
      Console.WriteLine(Fractions.DynamicCount); // 2
      Console.ReadKey();
   }