Olá, Luis! Bom dia!
Gostei muito da sua abordagem para resolver o desafio utilizando o Dictionary<int, string>
. É uma forma bem interessante e prática de mapear as tonalidades musicais. Vou aproveitar para te dar uma sugestão que pode deixar o seu código ainda mais organizado e eficiente.
Você já está utilizando um Dictionary
para mapear as tonalidades, então podemos simplificar a sua classe Musica
um pouco mais. Vou te mostrar como:
- Remover a necessidade de um array de tonalidades: Como você já tem o
Dictionary
, não precisa de um array separado para as tonalidades. - Utilizar a propriedade
Key
diretamente no Dictionary
: Isso permite que você obtenha a tonalidade diretamente do Dictionary
.
Aqui está uma versão ajustada do seu código:
using System.Text.Json.Serialization;
namespace ScreenSound_04.Modelos
{
internal class Musica
{
private static readonly Dictionary<int, string> keys = new()
{
{0, "C"},{1, "C#"},{2, "D"},{3, "D#"},{4, "E"},{5, "F"},{6, "F#"},{7, "G"},{8, "G#"},{9, "A"},{10, "A#"},{11, "B"}
};
[JsonPropertyName("song")]
public string? Nome { get; set; }
[JsonPropertyName("artist")]
public string? Artista { get; set; }
[JsonPropertyName("duration_ms")]
public int Duracao { get; set; }
[JsonPropertyName("genre")]
public string? Genero { get; set; }
[JsonPropertyName("key")]
public int Key { get; set; }
public string Tonalidade => keys.ContainsKey(Key) ? keys[Key] : "Desconhecida";
public void ExibirDetalhesDaMusica()
{
Console.WriteLine($"Artista: {Artista}");
Console.WriteLine($"Música: {Nome}");
Console.WriteLine($"Duração em minutos: {Math.Round(Duracao / 1000.0 / 60, 2)}");
Console.WriteLine($"Gênero: {Genero}");
Console.WriteLine($"Tonalidade: {Tonalidade}");
}
}
}
Alterações e Melhorias:
- Dicionário estático: O
Dictionary
foi movido para ser um campo estático, já que ele é imutável e compartilhado entre todas as instâncias da classe Musica
. - Propriedade
Tonalidade
simplificada: A propriedade Tonalidade
agora usa o Dictionary
diretamente para obter a tonalidade correspondente ao Key
. - Tratamento de chave desconhecida: Adicionei uma verificação para retornar "Desconhecida" caso a chave não exista no
Dictionary
.
Essa abordagem mantém seu código limpo e eficiente, aproveitando ao máximo o Dictionary
para mapear as tonalidades.
Espero ter ajudado e bons estudos!