如何跳过Foreach中的记录

时间:2009-06-09 12:30:43

标签: c# .net foreach try-catch

我正在尝试通过简单登录从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,这不是我想要的。有什么想法吗?

6 个答案:

答案 0 :(得分:30)

您正在寻找继续

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

答案 1 :(得分:13)

改为使用continue语句:

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

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

请注意,如果有任何合理的方法可以获得有效用户列表并进行检查,那么就像在此处使用流控制的例外一样。这可能不太可行,但值得检查:)

答案 2 :(得分:5)

您必须使用continue;

答案 3 :(得分:5)

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

答案 4 :(得分:1)

而不是抛出异常,而不是先尝试检查用户是否有效。抛出异常是非常昂贵的,并且实际上应该仅用于“特殊”情况而不是控制应用程序的逻辑流程,这不是他们应该使用的,因为您期望某些用户失败。

答案 5 :(得分: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() );