Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

[Sugestão] Possível solução utilizando 'Enums'

Em relação ao primeiro desafio, gostaria de compartilhar a solução a que cheguei, que consiste em criar uma classe "enum Key":

namespace ScreenSoundAPIClient
{
    public enum Key
    {
        C = 0,
        Csharp = 1,
        D = 2,
        Dsharp = 3,
        E = 4,
        F = 5,
        Fsharp = 6,
        G = 7,
        Gsharp = 8,
        A = 9,
        Asharp = 10,
        B = 11,
        
    }
}

E atualizando a classe "Musica" para ficar assim:

using System.Text.Json.Serialization;

namespace ScreenSoundAPIClient.Models
{
    internal class Music
    {
        [JsonPropertyName("artist")]
        public string? Artist { get; set; }
        [JsonPropertyName("song")]
        public string? Song { get; set; }
        [JsonPropertyName("duration_ms")]
        public int? Duration { get; set; }
        [JsonPropertyName("genre")]
        public string? Genre { get; set; }
        [JsonPropertyName("key")]
        public Key SongKey { get; set; }

        public void ShowDetails()
        {
            Console.WriteLine($"Artist: {Artist}");
            Console.WriteLine($"Song: {Song}");
            Console.WriteLine($"Duration: {Duration / 1000}");
            Console.WriteLine($"Genre: {Genre}");
            Console.WriteLine($"Key: {SongKey}");
        }
    }
}

A única parte ruim dessa solução foi que ainda é necessário criar alguns métodos para exibir as 'Keys' como proposto na aula ex:(C#, F#, A#). Porém, acredito que é uma maneira válida e gostaria de compartilhá-la aqui no fórum para demonstrar como podemos utilizar 'enums' :)

2 respostas
solução!

Olá Lucas!

Parabéns pela solução que você encontrou utilizando enums! Realmente, utilizar enums é uma forma válida de representar um conjunto fixo de valores, como é o caso das tonalidades musicais.

A ideia de criar uma classe enum chamada "Key" para representar as tonalidades é muito boa. Dessa forma, você consegue atribuir a tonalidade correta a cada música, facilitando a manipulação desses valores.

No entanto, você mencionou que ainda é necessário criar alguns métodos para exibir as tonalidades como proposto na aula. Entendo que isso possa ser um pouco trabalhoso, mas é uma etapa importante para garantir que as tonalidades sejam exibidas corretamente.

Uma sugestão para facilitar a exibição das tonalidades é criar um método na classe enum "Key" que retorne a representação textual da tonalidade. Por exemplo:

public enum Key
{
    C = 0,
    Csharp = 1,
    D = 2,
    // demais tonalidades...
    
    public string GetTonalidade()
    {
        switch (this)
        {
            case Key.C:
                return "C";
            case Key.Csharp:
                return "C#";
            case Key.D:
                return "D";
            // demais casos...
            default:
                return string.Empty;
        }
    }
}

Dessa forma, ao invés de exibir o valor numérico da tonalidade, você pode chamar o método GetTonalidade() para exibir a representação textual da tonalidade. Por exemplo:

Console.WriteLine($"Key: {SongKey.GetTonalidade()}");

Assim, você evita a necessidade de criar vários métodos para exibir as tonalidades manualmente.

Espero que essa sugestão seja útil para você! Continue compartilhando suas soluções e dúvidas aqui no fórum, assim todos podemos aprender juntos.

Espero ter ajudado e bons estudos!

Demais! Cheguei a uma solução parecida depois de compartilhar minha solução. Obrigado por compartilhar a sua! Fiquei empolgado em mencionar a utilização de 'enums', mas acabei não compartilhando o resto da minha solução. Obrigado pelo complemento!