2009-06-09 98 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

我想一个空的catch将做的工作你... – 2009-06-09 12:33:28

回答

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