Я хочу выполнить итерации по алфавиту как так:
foreach(char c in alphabet)
{
//do something with letter
}
Действительно ли массив символов является лучшим способом сделать это? (чувства hacky)
Править: Метрика "меньше всего вводит для реализации все еще будучи читаемой и устойчивой"
(Предполагается ASCII и т. Д.)
for (char c = 'A'; c <= 'Z'; c++)
{
//do something with letter
}
В качестве альтернативы, вы можете разделить его на поставщика и использовать итератор (если вы планируете поддерживать интернационализацию):
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
}
Что ж, чтобы использовать цикл foreach
в C #, алфавит может быть любым IEnumerable
. Что в этом "хакерского"?
Или вы могли бы,
string alphabet = "abcdefghijklmnopqrstuvwxyz";
foreach(char c in alphabet)
{
//do something with letter
}
Можно было сделать так:
for(int i = 65; i <= 95; i++)
{
//use System.Convert.ToChar() f.e. here
doSomethingWithTheChar(Convert.ToChar(i));
}
Хотя и не лучшим способом. Может быть, мы могли бы лучше помочь, если бы знали причину этого.
Enumerable.Range(65, 26).Select(a => new { A = (char)(a) }).ToList().ForEach(c => Console.WriteLine(c.A));
Я нашел это:
foreach(char letter in Enumerable.Range(65, 26).ToList().ConvertAll(delegate(int value) { return (char)value; }))
{
//breakpoint here to confirm
}
случайно читая этот блог, и подумал, что это интересный способ решения задачи.