segunda-feira, 2 de setembro de 2013

Trabalhando com Enum C#

Afinal o que é enum ?

Enum é a melhor forma para se trabalhar com constantes, e manter uma forte tipagem de um determinado atributo, e garantir que um combobox por exemplo irá manter nossos atributos coesos, e que nossa variável será armazenada com os tipos pré definidos, como exemplo cito os tipos de carros de uma locadora de veículos qualquer, a praticidade dos enums é enxergada melhor com o código abaixo:


Vamos criar o nosso formulário, parecido com este:




Agora vamos criar a nossa classe Carro.cs

public  class Carro
{
       public enum TipoCarro
       {          
           Sedan = 1,
           Esportivo = 2,
           Hatch = 3,
           Other = 4
       }

       public TipoCarro tipoCarro { get; set; }

   }

Perceba que os valores inteiros que acompanham podem ser recuperados


Crie agora eventos de load e click para o botão, e após isto deixe seu código igual a este:


private void Form1_Load(object sender, EventArgs e)
{          
    comboBox1.DataSource = Enum.GetValues(typeof(Carro.TipoCarro));        
 }

 private void button1_Click(object sender, EventArgs e)
 {
            Carro.TipoCarro tipo = (Carro.TipoCarro)comboBox1.SelectedItem;

            MessageBox.Show(String.Concat(comboBox1.SelectedValue.ToString(), " - ", (int)tipo));
  }
     

Note que povoamos o datasource do combobox com os values do Enum,
Pegamos o enum selecionado no combobox e atribuimos na propriedade "tipo" e que
para acessar os inteiros do enum fizemos um cast simples no item selecionado -> (int)tipo
     
Ao rodar o programa:




Pronto criamos enum bem eficiente e fortemente tipado  ;)

Uma das vantagens de se ter enum é que podem ser tratados como se fossem inteiros, ou seja, podemos usar em switchs, if... 

Além de podermos comparar a tipagem ao invés de comparar strings.

Bonus - If utilizando Enum:

 Carro c = new Carro();
 c.tipoCarro = Carro.TipoCarro.Esportivo;

if (c.tipoCarro == Carro.TipoCarro.Esportivo)
{
             //TODO
}

* muito mais limpo do que comparar strings.