2009-06-09 6 views
7

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

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

Вот код:

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

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

+0

Я предполагаю пустой улов будет делать работу за вас ... –

+1

Неа продолжать это лучший способ, обусловленно там действия после этого я не показывал. – Polo

+0

Personnaly Я буду использовать переменную User внутри блока try и просто поймать исключение без перерыва и продолжить. –

ответ

30

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

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

Используйте continue заявление вместо:

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

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

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

5

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

1

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

0

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

Используйте продолжить заявление вместо:

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()); 

 Смежные вопросы

  • Нет связанных вопросов^_^