Как пропустить запись в Foreach - PullRequest
7 голосов
/ 09 июня 2009

Я пытаюсь создать объект из базы Active Directory с помощью простого входа в систему. Проблема в том, что некоторые данные для входа действительны.

Как я могу просто использовать try-catch, чтобы в случае возникновения исключения просто перейти к следующему входу?

Вот код:

foreach (var PharosUserItem in ListRef)
{
    ADUser User;
    try
    {
        User = new ADUser(PharosUserItem.UserLoginPharos);
    }
    catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
    {
        break;
    }
}

Перерыв выводит меня из foreach, а это не то, чего я хочу. Есть идеи?

Ответы [ 6 ]

30 голосов
/ 09 июня 2009

Вы ищете продолжить

foreach (var PharosUserItem in ListRef)
    {
        ADUser User;
        try
        {
            User = new ADUser(PharosUserItem.UserLoginPharos);
        }
        catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
        {
            continue;
        }
    }
13 голосов
/ 09 июня 2009

Вместо этого используйте оператор continue:

foreach (var pharosUserItem in ListRef)
{
    ADUser user;
    try
    {
        user = new ADUser(pharosUserItem.UserLoginPharos);
    }
    catch (UserNotFoundException)
    {
        continue;
    }
    // Use "user" here
}

(Я сделал несколько изменений в терминах регистра переменных, избегая использования массивно длинного полного имени для исключения и предоставляя переменную для исключения, которую вы затем игнорируете.)

Обратите внимание, что если есть какой-то разумный способ получить список действительных пользователей и проверить его, это было бы лучше, чем использовать исключение для управления потоком, как здесь. Возможно, это не осуществимо, но стоит проверить:)

5 голосов
/ 09 июня 2009

Используйте оператор continue, чтобы перейти к следующей итерации.

5 голосов
/ 09 июня 2009

Вы должны использовать continue;

1 голос
/ 09 июня 2009

Вместо того, чтобы генерировать исключение, вместо этого вы должны попытаться проверить, действителен ли пользователь первым. Создание исключений довольно дорого и должно использоваться только в «исключительных» обстоятельствах, а не для контроля логического потока приложения, это не то, для чего они должны использоваться, поскольку вы ожидаете, что некоторые пользователи потерпят неудачу.

0 голосов
/ 09 июня 2009

почему бы не использовать ничего вместо продолжения?

Вместо этого используйте оператор continue:

foreach (var pharosUserItem in ListRef)
{
    ADUser user;
    try
    {
        user = new ADUser(pharosUserItem.UserLoginPharos);
    }
    catch (UserNotFoundException)
    {

    }
    // Use "user" here
}

или положить

       console.writeline("user not found: "+ pharosuseritem.tostring() );
...