How to simplify the code with ForEach's List?

5

How to use ForEach() of List in the implementation below

using System.Collections.Generic;

public class Program
{
    public static void Main()
    {   
        List<Pessoa> pessoas = new List<Pessoa>();
        pessoas.Add(new Pessoa(){Nome = "José" , Sexo = "M"});
        pessoas.Add(new Pessoa(){Nome = "Pedro", Sexo = "M"});
        pessoas.Add(new Pessoa(){Nome = "João" , Sexo = "M"});
        pessoas.Add(new Pessoa(){Nome = "Maria", Sexo = "F"});

        bool temMulher = new VerificaSeHaMulher(pessoas).Verifica();
    }
}

class VerificaSeHaMulher
{
    List<Pessoa> pessoas;

    public VerificaSeHaMulher(List<Pessoa> pessoas)
    {
        this.pessoas = pessoas;
    }

    public bool Verifica()
    {
        foreach(Pessoa pessoa in pessoas)
          if(pessoa.Sexo.Equals("F"))
            return true;

        return false;
    }
}

class Pessoa
{
    public string Nome;
    public string Sexo;
}

In this case, I want to make the implementation of the Verifica method cleaner.

    
asked by anonymous 17.10.2015 / 01:01

1 answer

2

I would change a few things more by style. But it's my taste, not to say it's clearly better.

Otherwise I would think if this method should not be within another class. It's useful to use this way, depending on your requirements, but if you can not tell what the reason for it being a class, you're embellishing the peacock.

using System.Collections.Generic;

public class Program {
    public static void Main() {   
        var pessoas = new List<Pessoa>() {
            new Pessoa() {Nome = "José" , Sexo = "M"},
            new Pessoa() {Nome = "Pedro", Sexo = "M"},
            new Pessoa() {Nome = "João" , Sexo = "M"},
            new Pessoa() {Nome = "Maria", Sexo = "F"}
        };
        bool temMulher = new VerificaSeHaMulher(pessoas).Verifica();
    }
}

class VerificaSeHaMulher {
    private readonly List<Pessoa> pessoas;
    public VerificaSeHaMulher(List<Pessoa> pessoas) {
        this.pessoas = pessoas;
    }

    public bool Verifica() {
        foreach (var pessoa in pessoas)
            if (pessoa.Sexo == "F")
                return true;
        return false;
    }
}

class Pessoa {
    public string Nome;
    public string Sexo;
}

See working on dotNetFiddle .

If you want to use LINQ just do this:

return pessoas.Any(p => p.Sexo == "F");

See working on dotNetFiddle .

Any() documentation.

    
17.10.2015 / 01:21