Olá a todos! Por que não posso usar a linha abaixo: public double Media => notas.Average(Avaliacao.Nota); no lugar da linha: public double Media => notas.Average(a => a.Nota);
Olá a todos! Por que não posso usar a linha abaixo: public double Media => notas.Average(Avaliacao.Nota); no lugar da linha: public double Media => notas.Average(a => a.Nota);
Olá, Carlos!
A questão que você levantou é muito interessante e comum quando começamos a trabalhar com expressões lambda e métodos de extensão como Average
. Vamos lá!
A diferença entre as duas linhas de código que você mencionou está na forma como a propriedade Nota
é acessada.
Linha incorreta:
public double Media => notas.Average(Avaliacao.Nota);
Nesta linha, você está tentando passar Avaliacao.Nota
como argumento para o método Average
. No entanto, Avaliacao.Nota
não é um método ou uma função que pode ser passada como argumento. Nota
é uma propriedade de instância da classe Avaliacao
, e para acessá-la, você precisa de uma instância dessa classe.
Linha correta:
public double Media => notas.Average(a => a.Nota);
Aqui, você está usando uma expressão lambda a => a.Nota
. Esta expressão percorre cada elemento a
da lista notas
e acessa a propriedade Nota
de cada instância de Avaliacao
. É assim que o método Average
sabe qual valor usar para calcular a média.
A expressão lambda é necessária neste contexto porque notas
é uma lista de objetos Avaliacao
, e precisamos especificar qual propriedade de cada objeto queremos usar para o cálculo da média.
Espero ter ajudado e bons estudos!