2009-11-16 9 views
6

Qual è il modo per ottenere Range "A" ... "Z", comeC# Enumerable Gamma

Enumerable.Range(1,100) 

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

Penso che dovresti usare "A", "Z". caratteri al posto delle stringhe – RvdK

risposta

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

Perché la chiamata a 'ToString' è fuori interesse? Non mi aspetto che faccia qualcosa di utile ... –

+0

Perché altrimenti quando inizi a enumerare otterrai numeri interi/caratteri (65, 66, ...) invece di stringhe ("A", "B", ...) che sarebbe più pratico. –

+0

Un'altra possibilità è chiamare 'ToString()' durante l'enumerazione, ma ho pensato che restituire 'IEnumerable ' sarebbe stato più semplice. –

11

EDIT: aggiornato per includere la correzione di Darin ...

In .NET 3.5 SP1, questo avrebbe lavorato:

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

Tuttavia, il comportamento di Castchanged for .NET 3.5 SP1, quindi ora esegue solo le conversioni riferimento alle conversioni unboxing. Quindi per .NET 3.5SP1 e versioni successive, è necessario:

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

Non è terribilmente bello, lo ammetto.

Con MiscUtil si potrebbe usare

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

Sia che così o non è una questione di gusto personale :)

+0

@Jon, 'Enumerable.Range ('A', 26) .Cast () .ToArray()' genererà un'eccezione InvalidCastException. –

+0

Grazie Jon. Sto studiando il capitolo 11 (Query Expression e Linq to Objects) del tuo libro. – user196546

+0

Ho ancora un dubbio qual è la differenza tra Of ofType <> e Cast <>? – user196546

12

Perché non solo mantenere le cose semplici ...

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

Grazie James, sembra molto carino. – user196546

+0

Fornisce un codice più piccolo rispetto agli altri esempi. BACIO :) – Carra

1

Un altro metodo, se vuoi tagliare da un elemento dell'alfabeto a un altro ...

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