Casting cadeia de caracteres para digitar safe-enum usando conversão definida pelo usuário

Para usar Enum's em combinação com strings, implementei uma classe StringEnum baseada emhttps: //stackoverflow.com/a/424414/129338.

No entanto, encontro problemas quando tento implementar as operações de conversão definidas pelo usuário sugerida

A classe StringEnum é definida da seguinte maneira:

public abstract class StringEnum
{
    private readonly String name;
    private readonly int value;

    protected static Dictionary<string, StringEnum> instances
        = new Dictionary<string, StringEnum>();

    protected StringEnum(int value, string name)
    {
        this.value = value;
        this.name = name;
        instances.Add(name.ToLower(), this);
    }

    public static explicit operator StringEnum(string name)
    {
        StringEnum se;
        if (instances.TryGetValue(name.ToLower(), out se))
        {
            return se;
        }
        throw new InvalidCastException();
    }

    public override string ToString()
    {
        return name;
    }
}

Eu uso essa classe como base assim:

public class DerivedStringEnum : StringEnum
{
    public static readonly DerivedStringEnum EnumValue1
        = new DerivedStringEnum (0, "EnumValue1");
    public static readonly DerivedStringEnum EnumValue2
        = new DerivedStringEnum (1, "EnumValue2");

    private DerivedStringEnum (int value, string name) : base(value, name) { }
}

No entanto, quando tento transmitir usando

string s = "EnumValue1"
DerivedStringEnum e = (DerivedStringEnum) s;

Um InvalidCastException é retornado. A inspeção do código mostra que o atributo de instâncias da classe StringEnum nunca é preenchid

Existe uma maneira fácil de corrigir isso

Prefiro não usar o atributo C # "magic" como [StringValue ("EnumValue1")]].

Obrigado

questionAnswers(4)

yourAnswerToTheQuestion