9

我正在尝试基于简单的登录从 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,这不是我想要的。有任何想法吗?

4

6 回答 6

34

您正在寻找继续

foreach (var PharosUserItem in ListRef)
    {
        ADUser User;
        try
        {
            User = new ADUser(PharosUserItem.UserLoginPharos);
        }
        catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
        {
            continue;
        }
    }
于 2009-06-09T12:31:59.037 回答
13

请改用以下continue语句:

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

(我在变量大小写方面做了一些更改,避免为异常使用很长的完全限定名称,并为异常提供一个变量,然后您将忽略该变量。)

请注意,如果有任何合理的方法可以获取有效用户列表并进行检查,那将比在此处使用异常进行流控制更好。这可能不可行,但值得检查:)

于 2009-06-09T12:31:24.950 回答
5

你必须使用continue;

于 2009-06-09T12:31:38.633 回答
5

使用该continue语句跳到下一个迭代。

于 2009-06-09T12:32:01.410 回答
1

与其抛出异常,不如先尝试检查用户是否有效。抛出异常是相当昂贵的,并且应该只在“异常”情况下使用,而不是控制应用程序的逻辑流程,这不是他们应该使用的,因为您期望某些用户会失败。

于 2009-06-09T12:35:51.400 回答
0

为什么不使用任何东西而不是继续?

请改用 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() );
于 2009-06-09T13:51:14.103 回答