Задать вопрос
@cursedgrail

Можно ли добавить свой оператор итерации в C#?

Ни для кого не секрет, что в C# есть оператор итерации for.
Он, само собой, хорош и гибок, но есть в нём и некоторая проблема: иногда он слишком громоздкий в ситуациях, итерация нужна всего лишь от 0 до указанного индекса.

Появилась идея: реализовать свой оператор итерации для случаев простого перебора всех целых чисел на интервале от 0 до указанного числа.

То есть, например так:

adfor(number/* итератор (i) изменяется от нуля до number*/)
{
    Console.WriteLine(i); /*здесь, в фигурных скобках, описывается набор действий, собственно, как и в for*/
}

adfor(number1, number2/* перегрузка, при двух аргументах, i изменятся от нуля до number1, а j - от нуля до number2*/)
{
    Console.WriteLine(i);
    {
        Console.WriteLine(j); /* в случае надобности, во вложенных фигурных скобках можно отдельно описать действия вложенного цикла*/
    }
}


Можно ли что-то такое реализовать? Гугление не выдало ничего близкого к теме.

И, да: нужен именно оператор, который было бы использовать удобнее, чем обычный for.
  • Вопрос задан
  • 418 просмотров
Подписаться 1 Средний Комментировать
Пригласить эксперта
Ответы на вопрос 2
yarosroman
@yarosroman Куратор тега C#
C# the best
Нет. Можете написать функцию и в неё передавать числа и делегат. Громоздкого ничего в обычном for нет, как и нет необходимости еще в одном операторе итерации.

Хотя можете взять Roslyn, сделать форк, и в него добавить, что нужно вам.
Ответ написан
Комментировать
@sergey_kzn
А если мне нужны не i и j, а k и m?
Что делать если во вложенных скобках мне не нужен вложенный цикл, они используются только для группировки операторов?
По моему for достаточно удобен.

Можете использовать foreach и Enumerable.Range
foreach (int i in Enumerable.Range(1, 10))
{
    foreach (int j in Enumerable.Range(1, 10))
    {
        Console.WriteLine($"{i} {j}");
    }
}


Если ответы вас не убедят, создайте issue к тому же Roslyn и посмотрите на результат =)
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы