Is it possible to produce simpler code for this function without changing enum
?
/// <remarks/>
[System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")]
[System.SerializableAttribute()]
public enum Velocidade
{
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("01")]
Baixa,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("02")]
Normal,
/// <remarks/>
[System.Xml.Serialization.XmlEnumAttribute("03")]
Rapida,
}
Below is a method to check if the value exists:
private bool EnumHasValue(Type pTipoDoEnum, string valorDoEnum)
{
foreach (var val in Enum.GetValues(pTipoDoEnum))
{
var member = pTipoDoEnum.GetMember(val.ToString()).FirstOrDefault();
var attribute = member.GetCustomAttributes(false).OfType<XmlEnumAttribute>().FirstOrDefault();
if (valorDoEnum == attribute.Name)
{
return true;
}
}
return false;
}
In the method below the value corresponding to string
is found
private object EnumFromString(Type pTipoDoEnum, string valorDoEnum)
{
foreach (var val in Enum.GetValues(pTipoDoEnum))
{
var member = pTipoDoEnum.GetMember(val.ToString()).FirstOrDefault();
var attribute = member.GetCustomAttributes(false).OfType<XmlEnumAttribute>().FirstOrDefault();
if (valorDoEnum == attribute.Name)
{
return val;
}
}
throw new Exception("Não existe o valor " + Text + " para o tipo " + pTipoDoEnum.ToString() + ". Utilize o método EnumHasValue antes da conversão.");
}
Here's how the method is called:
string text = "02";
Velocidade velocidade = new Velocidade();
if (EnumHasValue(typeof(Velocidade),text)) velocidade = (Velocidade)EnumFromString(typeof(Velocidade), text);
// O resultado é: "Normal"
textBox1.Text = "O resultado é: \"" + velocidade.ToString() + "\"";