La forma más rápida de enumerar el alfabeto

Quiero iterar sobre el alfabeto así:

foreach(char c in alphabet) { //do something with letter } 

¿Es una matriz de caracteres la mejor manera de hacer esto? (se siente hacky)

Editar: la métrica es “menos tipeada para implementar mientras sigue siendo legible y robusta”

(Asume ASCII, etc.)

 for (char c = 'A'; c <= 'Z'; c++) { //do something with letter } 

Alternativamente, puede dividirlo en un proveedor y usar un iterador (si está planeando apoyar la internacionalización):

 public class EnglishAlphabetProvider : IAlphabetProvider { public IEnumerable GetAlphabet() { for (char c = 'A'; c <= 'Z'; c++) { yield return c; } } } IAlphabetProvider provider = new EnglishAlphabetProvider(); foreach (char c in provider.GetAlphabet()) { //do something with letter } 

O podrías hacer,

 string alphabet = "abcdefghijklmnopqrstuvwxyz"; foreach(char c in alphabet) { //do something with letter } 
 var alphabet = Enumerable.Range(0, 26).Select(i => Convert.ToChar('A' + i)); 
 Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(cA)); 

Bien, para usar el ciclo foreach en C #, el alfabeto puede ser cualquier IEnumerable . ¿Qué se siente “hacky” al respecto?

Podrías hacer esto:

 for(int i = 65; i <= 95; i++) { //use System.Convert.ToChar() fe here doSomethingWithTheChar(Convert.ToChar(i)); } 

Sin embargo, tampoco es la mejor manera. Tal vez podríamos ayudar mejor si supiéramos el motivo de esto.

Encontré esto:

 foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; })) { //breakpoint here to confirm } 

mientras leía este blog al azar, y pensó que era una forma interesante de realizar la tarea.

Use Enumerable.Range :

 Enumerable.Range('A', ('Z' - 'A' + 1)).Select(i => (char)i) 
    Intereting Posts