2009-11-16 18 views
6

¿Cuál es la manera de conseguir rango "A" ... "Z" comoC# Enumerable Rango

Enumerable.Range(1,100) 

Enumerable.Range("A","Z"); 
+0

Creo que deberías usar 'A', 'Z'. caracteres en lugar de cadenas – RvdK

Respuesta

10
Enumerable.Range('A', 26).Select(x => ((char)x).ToString()) 
+0

¿Por qué la llamada a 'ToString' es de su interés? No esperaría que hiciera nada útil ... –

+0

Porque de lo contrario, cuando empiece a enumerar obtendrá enteros/caracteres (65, 66, ...) en lugar de cadenas ("A", "B", ...) que sería más práctico. –

+0

Otra posibilidad es llamar a 'ToString()' durante la enumeración, pero pensé que devolver 'IEnumerable ' sería más fácil. –

11

EDIT: Se ha actualizado para incluir la corrección de Darin ...

En .NET 3.5 SP1, esto habría trabajado:

Enumerable.Range('A', 26).Cast<char>() 

Sin embargo, el comportamiento de Castchanged for .NET 3.5 SP1, por lo que ahora sólo realiza las conversiones de referencia en las conversiones unboxing. Entonces, para .NET 3.5SP1 y superior, necesita:

Enumerable.Range('A', 26).Select(x => (char) x); 

No es terriblemente agradable, lo admito.

Con MiscUtil podría utilizar

'A'.To('Z').StepChar(1) 

Tanto si así o no es una cuestión de gusto personal :)

+0

@Jon, 'Enumerable.Range ('A', 26) .Cast () .ToArray()' arrojará una InvalidCastException. –

+0

Gracias Jon. Solo estoy estudiando el Capítulo 11 (Expresión de consulta y Linq para objetos) de su libro. – user196546

+0

Tengo una duda más ¿cuál es la diferencia entre Of of Type <> y Cast <>? – user196546

12

Por qué no sólo que sea sencillo ...

public static IEnumerable<char> GetAlphabet() 
{ 
    return "ABCDEFGHIJKLMNOPQRSTUVWXYZ".AsEnumerable(); 
} 
+0

Gracias James, parece muy agradable. – user196546

+0

Proporciona un código más pequeño que los otros ejemplos. BESO :) – Carra

1

Otro método, si desea dividir de un elemento del alfabeto a otro ...

Enumerable.Range(0,26).Select(x => (char)((char)x + 'A')) 
Cuestiones relacionadas