Редактировать 2 :
Вероятно, это самый простой способ реализовать это . Я проверил, все отлично работает. Вы можете генерировать бесконечное количество строк.
public IEnumerable<string> GenerateStrings()
{
foreach(string character in Alphabet())
{
yield return character;
}
foreach (string prefix in GenerateStrings())
{
foreach(string suffix in Alphabet())
{
yield return prefix + suffix;
}
}
}
public IEnumerable<string> Alphabet()
{
for(int i = 0; i < 26; i++)
{
yield return ((char)('A' + i)).ToString();
}
}
Материал, который я написал раньше:
Вы также можете написать небольшую рекурсивную функцию, которая возвращает любую строку по определенному индексу. Это может быть не оптимально с точки зрения производительности, поскольку есть несколько повторяющихся делений, но оно может быть достаточно быстрым для вашей цели.
Это довольно коротко и просто:
string GetString(int index)
{
if (index < 26)
{
return ((char)('A' + index)).ToString();
}
return GetString(index / 26 - 1) + GetString(index % 26);
}
использование (также может быть введено в другой метод:
List<string> strings = Enumerable.Range(0, 1000)
.Select(x => GetString(x))
.ToList();
Это рабочий код, только что написал тест для него.
Редактировать: например, приложение "полный путь linq" GetString:
public void IEnumerale<string> GenerateStrings()
{
int index = 0;
// generate "infinit" number of values ...
while (true)
{
// ignoring index == int.MaxValue
yield return GetString(index++);
}
}
List<string> strings = GenerateStrings().Take(1000).ToList();