Um Enum pode ser considerado como uma Classe que contém dois atributos: Código e Descrição
Vamos dizer que você possui um combo para selecionar o sexo do cliente. Masculino e Feminino. Vamos dizer que você também tenha uma tabela no banco tblSexo, contendo dois registros, a saber Masculino e Feminino.
Veja, sexo não é algo que fica mudando com frequência. (Sei lá, daqui a pouco inventam Masculino, Feminino, Outros. rs)
Pergunto toda vez que você quiser carregar um combo com o sexo você irá no banco de dados ou num webservice, abrir conexão, fazer um SELECT para trazer dois registros, instanciar uma lista desta classe ou um array e popula o combo? Será que pegando do Enum não seria mais rápido, mais simples e pouco processamento?
O Enum serve para elegancia também, muitas vezes fica ruim você fazer um if(Codigo == 1), é mais elegante e melhor para todos do desenvolvimento ler um código if(Codigo == TipoEndereco.APARTAMENTO), mas também serve para evitar ir no banco, instanciar objetos, abrir conexão, fazer SELECT para dados que não se modificam com frequencia.
Abs
Rodrigo