1
resposta

Uso do () para criar lista

Vejo que em alguns exercicios ao criar a lista usam o () e em outros nao. Porque?

List<Musica> musicas = new List<Musica>
{
    new Musica { Id = 1, Nome = "Sweet Child O'Mine", GeneroId = 1 },
    new Musica { Id = 2, Nome = "I Shot The Sheriff", GeneroId = 2 },
    new Musica { Id = 3, Nome = "Danúbio Azul", GeneroId = 6 }
};

List<Musica> musicas = new List<Musica>()
{
    new Musica { Id = 1, Nome = "Sweet Child O'Mine", GeneroId = 1 },
    new Musica { Id = 2, Nome = "I Shot The Sheriff", GeneroId = 2 },
    new Musica { Id = 3, Nome = "Danúbio Azul", GeneroId = 6 }
};
1 resposta

Olá, Janile

Em C# podemos omitir os parênteses ao utilizarmos o operador new desde que passemos propriedades de inicialização. Por exemplo...

List<Musica> musicas = new List<Musica>
{
    new Musica { Id = 1, Nome = "Sweet Child O'Mine", GeneroId = 1 },
    new Musica { Id = 2, Nome = "I Shot The Sheriff", GeneroId = 2 },
    new Musica { Id = 3, Nome = "Danúbio Azul", GeneroId = 6 }
};

....é válido, mas...

List<Musica> musicas = new List<Musica>;

... não é.

Você pode ver como o construtor sem parâmetros é chamado mesmo quando não incluímos os parênteses na construção do objeto, neste link:

https://sharplab.io/#v2:CYLg1APgAgDABFAjAbgLAChYMQFjZgZgQCY4BhOAbwzloSKhzgFkAKASiprp4BkBLAM4AXADzMAroP4BjAIYA+OAFspsuYMRwAvHAB2AUwDucASPFr5C7j1rV0tx/uMtLcqnACSwHXEQAaOAA5AHtlA18AIgBlIwMDYXIAC34AGx8AeQByZn5DSMCAcQNDACcQ718tAF8bW2rkJya6nha6JABOVgASSNVpeU0QKn71TQA6MhCJPWFqlQAvgY1I9nxmhyczMUllpVHB0l1DE22LPY42uyvbE9dljg9K3WJA0PCozzhopJDEgBUkhEfgZSvwAGbggpwYplCo+F5war+G48O67dSPSheBFwAhvMIRXSRAAicj0CwARvwQnAAIIALwkqWhsNB8N8ADYkTcGjcbp0en03IJiMNKAcNMRJtNZvNlEsxqt1nRaug1RgoAxSBj5Bh7DwtXA8olKtiAOYJRqCK08za0I1IeDvCIW2024SNNWGogmmEldlmuCWz1wD3IDX2+j3TGcbFq6pAA==

No link acima, no painel esquerdo você vê o código do arquivo .cs, e no painel direito como o compilador gera o código da Linguagem Intermediária (IL) do .NET. Note como os parênteses foram incluídos no painel direito pelo compilador:

        List<Musica> musicas1 = new List<Musica>
        {
            new Musica { Id = 1, Nome = "Sweet Child O'Mine", GeneroId = 1 }
        };               

        Console.WriteLine($"musicas1: {musicas1.Count} músicas");

        List<Musica> musicas2 = new List<Musica>()
        {
            new Musica() { Id = 2, Nome = "I Shot The Sheriff", GeneroId = 2 },
            new Musica() { Id = 3, Nome = "Danúbio Azul", GeneroId = 6 }
        };

        Console.WriteLine($"musicas2: {musicas2.Count} músicas");