0
respostas

Mapeamento dos valores

Assistindo a aula fiquei com uma duvida do porque o dicionario foi criado usando uma string como chave e tendo o enum como valor, sendo que queriamos o valor string que resultava do enum. Pensei que o mais natural seria isso:

        private static Dictionary<ClassificacaoIndicativa, string> mapa = new Dictionary<ClassificacaoIndicativa, string>()
        {
            { ClassificacaoIndicativa.Livre, "G"},
            { ClassificacaoIndicativa.DezAnos, "PG"},
            { ClassificacaoIndicativa.TrezeAnos, "PG-13"},
            { ClassificacaoIndicativa.QuatorzeAnos, "R"},
            { ClassificacaoIndicativa.DezoitoAnos, "NC-17"}
        };

Mas mesmo assim, mantendo o jeito que foi na aula, a minha maior duvida foi por que não utilizar a melhor funcionalidade do dicionario, que é dar a chave e ele devolver o valor? Nos dois metodos de extensão foi usado a mesma tecnica de selecionar usando linq. Pra pegar a chave faz sentido, mas pra pegar o valor correspondente a uma chave não seria melhor return mapa[chave]; ao invés de return mapa.First(d => d.Key == chave).Value;?

No fim das contas meu codigo ficou assim:

public static class ClassificacaoExtension
    {
        private static Dictionary<ClassificacaoIndicativa, string> mapa = new Dictionary<ClassificacaoIndicativa, string>()
        {
            { ClassificacaoIndicativa.Livre, "G"},
            { ClassificacaoIndicativa.DezAnos, "PG"},
            { ClassificacaoIndicativa.TrezeAnos, "PG-13"},
            { ClassificacaoIndicativa.QuatorzeAnos, "R"},
            { ClassificacaoIndicativa.DezoitoAnos, "NC-17"}
        };

        public static string ParaString(this ClassificacaoIndicativa valor)
        {
            return mapa[valor];
        }

        public static ClassificacaoIndicativa ParaValor(this string valor)
        {
            return mapa.First(d => d.Value == valor).Key;
        }

    }

E quando testei tudo pareceu funcionar normal, pelo menos por essa aula:

                Console.WriteLine("Para string:");
                Console.WriteLine(ClassificacaoIndicativa.Livre.ParaString());
                Console.WriteLine(ClassificacaoIndicativa.DezoitoAnos.ParaString());

                Console.WriteLine("\nPara valor:");
                Console.WriteLine("PG".ParaValor());
                Console.WriteLine("PG-13".ParaValor());
Para string:
G
NC-17

Para valor:
DezAnos
TrezeAnos

Teve algum motivo especifico pra essa escolha?