次の方法で共有


Refactor enum->class: Answer 1

This is the follow up to the enum->class refactoring post.

 

So, one approach is to try to decode what ‘enum’ does in C#.  Thomas Eyre’s answer is pretty much the same, with a couple differences:

· Thomas wrote his TDD, and delivered it with tests.  Good for you!

· I mark the field as ‘readonly’.  It’s a little safer, a little clearer about my intentions, and possibly better optimized by JIT.

· Mine is a ‘struct’.  That’s a good choice just because enum is a value type.  It also means that I don’t have to override the equality operations.

 

Here’s the result of my attempt:

 

      struct E

      {

            public const int a = 0;

            public const int b = 1;

            public const int c = 2;

            public readonly int Value;

            public E(int value) { this.Value = value; }

            public static implicit operator int(E e) { return e.Value; }

            public static implicit operator E(int i) { return new E(i); }

      }

 

I guess it’s not terribly exciting, but it does seem to work pretty well.

 

Can you see any differences between this struct and an actual enum?