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

Estou com dúvida no curso de Design Patterns para bons programadores em C#, no exercício do capítulo Muitos Descontos e o Chain of Responsibility.

Posso utilizar a classe LINQ para validar esses elementos??? Como posso implementar?

4 respostas

Hmmmm, pensei nisso, porém acho que é um pouco complexo implementar desta forma.

solução!

Oi Jeanpuga

Para verificar a existência de um item dentro da lista que obedece um critério utilizando o LINQ, você pode utilizar o método Any. Sua resposta utilizando o Any ficaria com o seguinte código:

public class DescontoPorVendaCasada : Desconto
{
    public Desconto Proximo { get; set; }

    public double Desconta(Orcamento orcamento)
    {
       bool existe = orcamento.Itens.Any(item => item.Nome.Equals("CANETA") || item.Nome.Equals("LAPIS"));

       if (existe)
       {
           return orcamento.Valor * 0.05;
       }
       else
       {
           return Proximo.Desconta(orcamento);
       }
    }
}

O método Any devolve o valor true se algum dos itens da lista obedecer a condição passada no lambda.

Uma implementação alternativa mais próxima da sua implementação original ficaria da seguinte forma:

public class DescontoPorVendaCasada : Desconto
{
    public Desconto Proximo { get; set; }

    public double Desconta(Orcamento orcamento)
    {
       string[] nomes = new string[] {"LAPIS", "CANETA"};
       bool existe = orcamento.Itens.Any(item => nomes.Contains(item.Nome));

       if (existe)
       {
           return orcamento.Valor * 0.05;
       }
       else
       {
           return Proximo.Desconta(orcamento);
       }
    }
}

Muito obrigado Vitor.

Agradeço também.