c# alphabet

c# - Manera más rápida de enumerar el alfabeto



alphabet (8)

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 raro)

Edición: la métrica es "menos escritura para implementar mientras aún es legible y robusta"


(Asume ASCII, etc.)

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

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

public class EnglishAlphabetProvider : IAlphabetProvider { public IEnumerable<char> 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 }


Bien, para usar el bucle foreach en C #, el alfabeto puede ser cualquier IEnumerable<char> . ¿Qué se siente "hacky" al respecto?


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, pensé que era una forma interesante de realizar la tarea.


O podrias hacer,

string alphabet = "abcdefghijklmnopqrstuvwxyz"; foreach(char c in alphabet) { //do something with letter }


Podrías hacer esto:

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

Aunque, tampoco es la mejor manera. Tal vez podríamos ayudar mejor si supiéramos la razón de esto.


Use Enumerable.Range :

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


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(c.A));