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

Aula: testando o que é realmente nescessário

Ex 6 - Três maiores lances.

a questão pede para atualizar a Classe Avaliador...

private void pegaOsMaioresNo(Leilao leilao)
    {
        var filtro = leilao.Lances.OrderBy(p => p.Valor).Take(3);
        maiores = new List<Lance>(filtro);
    }

e a minha duvida está no teste da classe tres-maiores-lance que não passa no teste, dei uma outra olhada no video pra esclarecer minha duvida e percebi que o professor usa este trecho de código para que a classe tres-maiores-lance passe no teste:

maiores = new List<Lance>(leilao.Lances.OrderByDescending(x => x.Valor));
            maiores = maiores.GetRange(0, maiores.Count > 3 ? 3 : maiores.Count);

mas ao colocar esse trecho de código não compila porquê o atributo GetRange não existe.


Error 1 'System.Collections.Generic.IList' does not contain a definition for 'GetRange' and no extension method 'GetRange' accepting a first argument of type 'System.Collections.Generic.IList' could be found (are you missing a using directive or an assembly reference?*

3 respostas

GetRange() é um método pertencente a classe List (List), e o erro indica que a sua utilização está sendo feita através da interface IList, que não possui o método em questão.

Tenha certeza de estar utilizando a classe List e não a sua interface.

solução!

Fala valdeir rodrigues blz?

Entendi a sua dúvida e a busca pela forma como o professor implementou, mais o que acontece é o seguinte:

A classe avaliador informada no exercício possui um erro de implementação que corrigindo-o você poderá passar nos testes.

O erro está na linha de código que segue abeixo:

var filtro = leilao.Lances.OrderBy(p => p.Valor).Take(3);

Com essa linha você irá ordenar os números em ordem crescente fazendo com que o seu teste não funcione pois você estará encontrando o menor número no começo da lista quando espera o maior.

Para corrigir este teste basta atualizar a classe avaliador substituindo o código que informei acima por este que segue logo abaixo:

private void pegaOsMaioresNo(Leilao leilao)
    {
        var filtro = leilao.Lances.OrderByDescending(p => p.Valor).Take(3);
        maiores = new List<Lance>(filtro);
    }

Nele o OrderByDescending faz com que a sua lista seja ordenada de maneira decrescente e você consiga o resultado esperado.

Quanto ao problema de não compilar caso queira utilizar a mesma implementação do professor é só seguir o que a Bruna falou e para isso mude o tipo da sua variavel maiores de:

private IList<Lance> maiores;

para:

private List<Lance> maiores;

Espero ter ajudado e bons estudos.

Valeu pela solução Bruna e Jefferson. Por causa de uma Letra kkk