Что сделает оператор break в Axapta?

У меня 2 цикла while, а во втором есть break; (см. код ниже)

Мой вопрос: вызовет ли перерыв остановку во втором цикле или для 2?

while select dirPartyRelationship
join    dirPartyTable
    where dirPartyTable.RecId == dirPartyRelationship.ChildParty
join    dirPersonName
    where   dirPersonName.Person == dirPartyTable.RecId
{
    while select checkDirRelationship
        where checkDirRelationship.ChildParty == dirPartyRelationship.RecId
    {
        if (checkDirRelationship.RelationshipTypeId == _relationshipType)
        {
            break;
        }
    }...

person Tassisto    schedule 23.10.2012    source источник


Ответы (1)


Разрыв вырвется только из текущего блока кода.

Создайте задание и используйте этот пример кода;

for(i=0; i<100; i++)
    {
        for(j=0; j<100; j++)
        {
            info(strfmt("inner loop count %1",j));
            break;
        }
        info(strfmt("outer loop count %1",i));
    }

Вы увидите быстрый пример, когда j никогда не превышает 0, но печатается 100 раз.

Изменить;

Если вы хотите выйти из вложенного цикла, вы можете обойти это, объявив boolean, возможно, называемый breakAll, и установив breakAll в true перед строкой break; во внутреннем цикле. Во внешнем цикле проверьте breakAll следующим образом;

for(i=0; i<100; i++)
    {
        for(j=0; j<100; j++)
        {
            info(strfmt("inner loop count %1",j));
            if (somethingToCheck)
            {
                breakAll = true;
                break;
            }
        }
        info(strfmt("outer loop count %1",i));
        if (breakAll)
        {
             break;
        }
    }
person AnthonyBlake    schedule 23.10.2012