2009-06-09 22 views
7

Estoy intentando crear un objeto desde una base de Active Directory con un simple inicio de sesión. El problema es que parte de la información de inicio de sesión es válida.Cómo omitir un registro en un Foreach

¿Cómo podría usar un try-catch para que, si se produce una excepción, salte al siguiente inicio de sesión?

Aquí está el código:

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

La ruptura me saca de la foreach, que no es lo que quiero. ¿Algunas ideas?

+0

supongo una captura vacío va a hacer el trabajo para usted ... –

+1

Nop continúa es la mejor manera, no pd son acciones después de eso que no he mostrado. – Polo

+0

Personnaly Usaré la variable User dentro del bloque try y simplemente atraparé la excepción sin interrupción ni continuaré. –

Respuesta

30

Usted está buscando continuar

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

utilizar la instrucción continue lugar:

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

(he hecho algunos cambios en cuanto a la variable de carcasa, evitando el uso de un nombre de forma masiva a largo completo para la excepción, y proporcionando una variable para el excepción que luego ignorará)

Tenga en cuenta que si hay alguna forma razonable de obtener una lista de usuarios válidos y verificarla, sería mejor que usar la excepción para control de flujo como lo hace aquí. Puede que no sea factible, pero vale la pena comprobar :)

5

Utilice la instrucción continue para pasar a la siguiente iteración.

1

En lugar de arrojar una excepción, en su lugar debe intentar comprobar primero si el usuario es válido. Lanzar excepciones es bastante caro y, en realidad, solo debe usarse en circunstancias "excepcionales" y no para controlar el flujo lógico de la aplicación, no es para lo que deben usarse ya que se espera que fallen algunos usuarios.

0

¿por qué no utilizar nada en lugar de continuar?

Utilice la instrucción continuará en su lugar:

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

    } 
    // Use "user" here 
} 

o poner un

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