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?