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