Ich möchte das Alphabet folgendermaßen durchlaufen:
foreach(char c in alphabet)
{
//do something with letter
}
Ist eine Reihe von Zeichen der beste Weg, dies zu tun? (fühlt sich hacky an)
Bearbeiten: Die Metrik ist "am wenigsten zu implementieren, während sie noch lesbar und robust ist".
Antworten:
(Nimmt ASCII usw. an)
for (char c = 'A'; c <= 'Z'; c++) { //do something with letter }
Alternativ können Sie es auf einen Anbieter aufteilen und einen Iterator verwenden (wenn Sie die Internationalisierung unterstützen möchten):
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 }
quelle
Enumerable.Range('a', 'z'-'a' + 1).Select(x=>(char)x)
Cast
, wird der Compiler diese nur akzeptieren, wenn Sie sieobject
zuerst verwenden. Das macht es zu einer Box-Konvertierung, sodass Sie nur genau das herausholen können, was Sie eingegeben haben. Also ziehe ich meinen Kommentar zurück.public interface IAlphabetProvider { IList<string> GetAlphabet(); }
aus Gründen der Übersichtlichkeit auch in Ihren Beitrag einfügen können, da es sich um eine benutzerdefinierte Benutzeroberfläche handelt. Auf den ersten Blick sieht es so aus, als obIAlphabetProvider
es sich um eine bereits vorhandene Schnittstelle in der .Net Framework-Klassenbibliothek handelt, und Sie haben sie einfach implementiert, um das Problem von OP zu lösen.Oder du könntest tun,
string alphabet = "abcdefghijklmnopqrstuvwxyz"; foreach(char c in alphabet) { //do something with letter }
quelle
String.GetEnumerator()
gehtchar
von char, so dass Sie nur einen Teil Unicode - Codepunkt / Ersatzpaar , wenn die Zeichenfolge solche Zeichen enthält haben würde. Vielleicht möchten Sie sowohl Ihr Alphabet als auch die Daten, die Sie damit vergleichen, normalisieren und sicherstellen, dass Sie in numerischen Codepunkten denken und nicht inchar
: stackoverflow.com/a/28155130/429091var alphabet = Enumerable.Range(0, 26).Select(i => Convert.ToChar('A' + i));
quelle
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));
quelle
foreach
Anweisung ist normalerweise klarer, wenn Sie eine Aktion für jedes Element einer Sequenz ausführen - dafür ist sie gedacht.Sie könnten dies tun:
for(int i = 65; i <= 95; i++) { //use System.Convert.ToChar() f.e. here doSomethingWithTheChar(Convert.ToChar(i)); }
Aber auch nicht der beste Weg. Vielleicht könnten wir besser helfen, wenn wir den Grund dafür kennen würden.
quelle
char
!Verwendung
Enumerable.Range
:Enumerable.Range('A', ('Z' - 'A' + 1)).Select(i => (char)i)
quelle
Ich habe das gefunden:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; })) { //breakpoint here to confirm }
beim zufälligen Lesen dieses Blogs und dachte, es sei ein interessanter Weg, um die Aufgabe zu erfüllen.
quelle