Algum tempo atraz precisei desenvolver uma função para retornar o signo de uma pessoa com base na data de nascimento.
Poderia criar um classe com um metodo que passaria uma data e receberia uma string com o Signo , mas confesso que sou muito preguiçoso =)
Então resolvi criar um Extension metodo para extender DateTime, além disso resolvi bolar uma solução que não utilizasse Ifs “só sobrou um =)” :
Para eliminar if resolvi criar um list e depois utilizar linq para pesquisar na coleção.
public static class DateObjectExtensions { class SignoMesDia { public Int16 Mes { get; set; } public Int16 DiaInicio { get; set; } public Int16 DiaFim { get; set; } public string Signo { get; set; } public SignoMesDia(Int16 _Mes, Int16 _DiaInicio, Int16 _DiaFim, string _Signo) { Mes = _Mes; DiaInicio = _DiaInicio; DiaFim = _DiaFim; Signo = _Signo; } } public static string ToSigno(this DateTime DataNascimento) { string signo = "Não Reconhecido"; List<SignoMesDia> signos = new List<SignoMesDia>(); signos.Add(new SignoMesDia(1, 1, 21, "Capricórnio")); signos.Add(new SignoMesDia(1, 22, 31, "Aquário")); signos.Add(new SignoMesDia(2, 1, 18, "Aquário")); signos.Add(new SignoMesDia(2, 19, 31, "Peixes")); signos.Add(new SignoMesDia(3, 1, 19, "Peixes")); signos.Add(new SignoMesDia(3, 20, 31, "Áries")); signos.Add(new SignoMesDia(4, 1, 20, "Áries")); signos.Add(new SignoMesDia(4, 21, 31, "Touro")); signos.Add(new SignoMesDia(5, 1, 20, "Touro")); signos.Add(new SignoMesDia(5, 21, 31, "Gêmeos")); signos.Add(new SignoMesDia(6, 1, 20, "Gêmeos")); signos.Add(new SignoMesDia(6, 21, 31, "Câncer")); signos.Add(new SignoMesDia(7, 1, 21, "Câncer")); signos.Add(new SignoMesDia(7, 22, 31, "Leão")); signos.Add(new SignoMesDia(8, 1, 22, "Leão")); signos.Add(new SignoMesDia(8, 23, 31, "Virgem")); signos.Add(new SignoMesDia(9, 1, 22, "Virgem")); signos.Add(new SignoMesDia(9, 23, 31, "Libra")); signos.Add(new SignoMesDia(10, 1, 22, "Libra")); signos.Add(new SignoMesDia(10, 23, 31, "Escorpião")); signos.Add(new SignoMesDia(11, 1, 21, "Escorpião")); signos.Add(new SignoMesDia(11, 22, 31, "Sagitário")); signos.Add(new SignoMesDia(12, 1, 21, "Sagitário")); signos.Add(new SignoMesDia(12, 22, 31, "Capricórnio")); var resposta = (from s in signos where s.Mes == DataNascimento.Month && DataNascimento.Day >= s.DiaInicio && DataNascimento.Day <= s.DiaFim select s).FirstOrDefault(); if (resposta != null) signo = resposta.Signo; return signo; }}