2009-06-09 95 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());