Exist Enum? Return Enum Value From String/XmlEnumAttribute

Oct 2 2017 2:56 PM
Can you simplify this code but without changing ENUM?
  1. /// [System.CodeDom.Compiler.GeneratedCodeAttribute("xsd", "4.6.1055.0")] [System.SerializableAttribute()] public enum Velocidade { /// [System.Xml.Serialization.XmlEnumAttribute("01")] Baixa, /// [System.Xml.Serialization.XmlEnumAttribute("02")] Normal, /// [System.Xml.Serialization.XmlEnumAttribute("03")] Rapida, } 
Here is to verify if exist
  1. private bool EnumHasValue(Type pTipoDoEnum, string valorDoEnum)  
  2. {  
  3. foreach (var val in Enum.GetValues(pTipoDoEnum))  
  4. {  
  5. var member = pTipoDoEnum.GetMember(val.ToString()).FirstOrDefault();  
  6. var attribute = member.GetCustomAttributes(false).OfType<XmlEnumAttribute>().FirstOrDefault();  
  7. if (valorDoEnum == attribute.Name)  
  8. {  
  9. return true;  
  10. }  
  11. }  
  12. return false;  
  13. }  
Now, find string and return value:
  1. private object EnumFromString(Type pTipoDoEnum, string valorDoEnum)  
  2. foreach (var val in Enum.GetValues(pTipoDoEnum))  
  3. {  
  4. var member = pTipoDoEnum.GetMember(val.ToString()).FirstOrDefault();  
  5. var attribute = member.GetCustomAttributes(false).OfType<XmlEnumAttribute>().FirstOrDefault();  
  6. if (valorDoEnum == attribute.Name)  
  7. {  
  8. return val;  
  9. }  
  10. }  
  11. throw new Exception("Não existe o valor " + Text + " para o tipo " + pTipoDoEnum.ToString() + ". Utilize o método EnumHasValue antes da conversão.");  
  12. }  
this is the call:
  1. string text = "02";  
  2. Velocidade velocidade = new Velocidade();  
  3. if (EnumHasValue(typeof(Velocidade),text)) velocidade = (Velocidade)EnumFromString(typeof(Velocidade), text);  
  4. // O resultado é: "Normal"  
  5. textBox1.Text = "O resultado é: \"" + velocidade.ToString() + "\"";

Answers (1)