Утверждения в состоянии цикла while - PullRequest
2 голосов
/ 09 августа 2011

Скажем, у меня есть коллекция вещей, к которой можно получить доступ с помощью TheCollection.GetByID(long), но я не могу заранее определить ее длину.Я хотел бы настроить цикл while для прохождения каждого из них.

Очевидно, я мог бы сделать что-то вроде этого:

var iter = 0; var thing = TheCollection.GetByID(iter);
while (thing != null) {
    dealWithTheThing(thing);
    iter++;
    thing = TheCollection.GetByID(iter);
}

Но я бы предпочел привести в порядок это, поставивизменения в конструкторе, и можно получить что-то вроде этого:

var iter = 0; var thing;
while ((thing = TheCollection.GetByID(iter++)) != null) {
    dealWithTheThing(thing);
}

Возможно ли это или что-то подобное?

Ответы [ 2 ]

4 голосов
/ 09 августа 2011

Да, ваш пример в порядке.Вы можете иметь назначения внутри условия, и стиль совершенно ясен (по крайней мере, для меня).

1 голос
/ 09 августа 2011

Хотя использование оператора присваивания в условии для цикла выглядит довольно красиво, для других это может привести к путанице, поскольку легко набрать от == до = ( подробнее: поиск по "выражениям присваивания" «)

После предупреждения я нахожу следующее более читабельным:

var iter = 0; var thing;
while (thing = TheCollection.GetByID(iter++) && thing != null) {
    dealWithTheThing(thing);
}

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...