Obtendo o index pela iteração do “foreach” (C#)

Sabemos que a iteração do “foreach” na linguagem do C# não conseguimos diretamente obter seu o index, algumas vezes temos que utilizar iterações com “for” para conseguirmos realizar tal êxito, e sua consequência é fazer indexação das propriedades dos objeto, Ex: Collection[i].PropertyName;

Neste post iremos elaborar uma Extension para conseguirmos o index dos objetos na iteração “foreach”.

Segue o código de exemplo:

1:  class Program  
2:  {  
3:    static void Main(string[] args)  
4:    {  
5:      var pessoas = new List<Pessoa>();  
6:    
7:      pessoas.Add(new Pessoa { Nome = "Fulano" });  
8:    
9:      pessoas.Add(new Pessoa { Nome = "Cicrano" });        
10:    
11:      pessoas.Each((pessoa, index) => {  
12:    
13:        Console.WriteLine("Index: {0} - Nome: {1}\n", index, pessoa.Nome);  
14:    
15:      });        
16:    }  
17:  }  
18:    
19:  class Pessoa  
20:  {  
21:    public string Nome { get; set; }  
22:  }    
23:    
24:  static class EachExtensions  
25:  {      
26:    public static void Each<T>(this IEnumerable<T> collection, Action<T, int> action)  
27:    {  
28:      int index = 0;  
29:      foreach (var obj in collection)  
30:      {  
31:        action(obj, index++);  
32:      }  
33:    }  
34:  }  

Como podemos observar o código acima, é criado uma lista de objetos do tipo Pessoa, e logo em seguida iteramos a listagem.
Analisando a classe estática “EachExtensions” nela tem o método “Each” e é através desse método que é feito a manipulação da criação dos índices nos objetos. Nesse método (Each) recebe uma “Action”, dentro desse método iteramos a collection e logo em seguida criamos suas ações, onde a ação é à indexação de cada objeto iterado.

Bom pessoal espero ter ajudado até o próximo post, abraços.

Anúncios

Removendo Acentos utilizando Métodos de extensão com C#

Métodos de extensão permitem que você “adicione” métodos para tipos existentes sem criar um novo tipo derivado, recompilar, ou modificar o tipo original. Os métodos de extensão são um tipo especial de método estático, mas eles são chamados como se fossem métodos de instância no tipo estendido. Para o código de cliente escrito em C # ou Visual Basic, não há diferença aparente entre chamar um método de extensão e os métodos que são realmente definidos em um tipo.
Mais informações acesse http://msdn.microsoft.com/en-us/library/vstudio/bb383977.aspx

Nesse tutorial iremos implementar um novo método de extensão, onde nesse método de extensão irá remover os acentos de uma determinada variável do tipo “string”. Como exemplo irei criar um novo projeto no VS2012 do tipo “Console Application”, logo abaixo segue a implementação.

Implementação e Codificação

public class Program
{
    static void Main(string[] args)
    {
        string palavra = "áéíóú";

        Console.WriteLine(palavra.RemoverAcentos());    
    }        
}

public static class StringExtensions
{
    public static string RemoverAcentos(this string valor)
    {
        byte[] bytes = Encoding.GetEncoding("Cyrillic").GetBytes(valor);

        return Encoding.ASCII.GetString(bytes);
    }
}

Como podemos observar a implementação é bem simples, criamos uma nova classe chamada StringExtensions e nela adicionamos o método de extensão chamado de RemoverAcentos(this string valor).
Com ajuda do .NET Framework, utilizaremos a classe abstract de Encoding chamando o método GetEnconding passando como parâmetro o valor Cyrillic do tipo string. Mais sobre a classe Encoding e o valor Cyrillic acesse o link http://msdn.microsoft.com/en-us/library/system.text.encoding.aspx

Conclusão

Com implementações de métodos extensão conseguimos ganhar produtividade e organização nas funções que viram a ser implementadas.

Referências:

Bom pessoal é isso e até a próxima…