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.