Início > C# > Série dicas do C#: Utilizando o Yield

Série dicas do C#: Utilizando o Yield

18 de julho de 2009 Deixe um comentário Go to comments

Olá,

Estarei iniciando uma série de dicas da linguagem C# no meu blog, e para comerçar irei falar um pouquinho do Yield.

No C# nós temos um operador bem interessante, trata-se do yield. O yield é utilizado em um bloco interator para fornecer um valor a um objeto do tipo IEnumerable e/ou sinalizar o fim da sua interação.

Vamos a um exemplo prático:

Criaremos um pequeno vetor contendo o nome de algumas pessoas.

//Lista de pessoas

string[] pessoas = new string[5];

pessoas[0] = "José António";

pessoas[1] = "Nelson Borges";

pessoas[2] = "José Ricardo";

pessoas[3] = "Maria Bonita";

pessoas[4] = "Joseph Cliffer";

 

Bom agora que temos nossa lista de pessoas, imagine um método que receba esta lista e retorne uma lista de string das pessoas que contenham “José” no nome, como fazer ?

Uma das formas mais encontradas é a seguinte:

 public List<string> listaID(string[] pessoas)

{

  //Criamos um objeto do tipo List<sring>;

  List<string> listaIdPessoas = new List<string>();

 

  //Percorrer o vetor de pessoas;

  foreach (string pessoa in pessoas)

  {

        //Fazemos a verificação e caso a condição seja verdadeira

        //adiciona na lista

        if (pessoa.Contains("José"))

            listaIdPessoas.Add(pessoa);

  }

  return listaIdPessoas;

}

 

O método acima, irá funcionar perfeitamente, mas veja como seria se utilizarmos o Yield:

public static IEnumerable listaId(string[] pessoas)

{

   //Percorrer o vetor de pessoas;

   foreach (string pessoa in pessoas)

   {

       //Fazemos a verificação e caso a condição seja verdadeira

       //adiciona na lista e ja retorna o IEnumerable

       if (pessoa.Contains("José"))

           yield return pessoa;

   }

}

 

Apesar de nosso exemplo ser muito simples, se comparar os dois exemplos irá perceber que utilizando o yield, temos uma redução de linhas de código.

As duas formas de se utilizar o yield:

yield return <expression>;

yield break;

 

Restrição:

O Yield não pode ser utilizado como parâmetro de um método, uma vez que ele é uma operação e não um tipo, Unsafe Blocks não são permitidos, assim como sua utilização em métodos anônimos.

 

Para mais informações acesse:
http://msdn.microsoft.com/en-us/library/9k7k7cf0(VS.80).aspx

 

Fica a dica, espero que seja útil.

 

Abraço,

Nelson Borges

Categorias:C#
  1. Nenhum comentário ainda.
  1. No trackbacks yet.

Deixe uma resposta

Preencha os seus dados abaixo ou clique em um ícone para log in:

Logotipo do WordPress.com

Você está comentando utilizando sua conta WordPress.com. Sair / Alterar )

Imagem do Twitter

Você está comentando utilizando sua conta Twitter. Sair / Alterar )

Foto do Facebook

Você está comentando utilizando sua conta Facebook. Sair / Alterar )

Foto do Google+

Você está comentando utilizando sua conta Google+. Sair / Alterar )

Conectando a %s

%d blogueiros gostam disto: