Acredito que quase todo mundo já precisou fazer uma validação de domínio alguma vez e boa parte das vezes, a primeira idéia que vem é utilizar um enum, porém algumas pessoas esbarram em uma dificuldade que é não poder ter um "enum de strings", ou seja, setar um texto decente para exibição.
Resposta:
Para contornar isso, iremos usar alguns funcionalidades que o .NET nos proporcionar, os Attributes e os Extension Methods.
C#:
| public enum EstadoCivil
|
| {
|
| [DisplayText(Texto="Solteiro e Feliz")]
|
| Solteiro,
|
| [DisplayText(Texto="Já era!")]
|
| Casado,
|
| [DisplayText(Texto = "Viuvo")]
|
| Viuvo,
|
| [DisplayText(Texto = "Novos tempos")]
|
| Divorciado
|
| }
|
|
|
| public class DisplayTextAttribute : Attribute
|
| {
|
| private string _texto;
|
|
|
| public string Texto
|
| {
|
| get { return _texto; }
|
| set { _texto = value; }
|
| }
|
| }
|
|
|
| public static string GetDisplayText(this Enum enumValue)
|
| {
|
| var type = enumValue.GetType();
|
| MemberInfo[] memberInfo = type.GetMember(enumValue.ToString());
|
|
|
| if (memberInfo == null || memberInfo.Length == 0)
|
| return enumValue.ToString();
|
|
|
| object[] attributes = memberInfo[0].GetCustomAttributes(typeof(DisplayTextAttribute), false);
|
| if (attributes == null || attributes.Length == 0)
|
| return enumValue.ToString();
|
|
|
| return ((DisplayTextAttribute)attributes[0]).texto;
|
| }
|
|
|
| static void Main(string[] args)
|
| {
|
|
|
| for (int i = 0; i < Enum.GetValues(typeof(EstadoCivil)).Length; i++)
|
| {
|
| Console.WriteLine((Enum.ToObject(typeof(EstadoCivil), i) as Enum).GetDisplayText());
|
| }
|
| } |