代码之家  ›  专栏  ›  技术社区  ›  Polo

如何跳过Foreach中的记录

  •  9
  • Polo  · 技术社区  · 17 年前

    我怎么能只使用try-catch,这样如果抛出异常,就跳到下一个登录?

    以下是代码:

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

    foreach

    6 回复  |  直到 17 年前
        1
  •  34
  •   Joseph    17 年前

    您正在寻找 继续

    foreach (var PharosUserItem in ListRef)
        {
            ADUser User;
            try
            {
                User = new ADUser(PharosUserItem.UserLoginPharos);
            }
            catch (ByTel.DirectoryServices.Exceptions.UserNotFoundException ex)
            {
                continue;
            }
        }
    
        2
  •  13
  •   Jon Skeet    17 年前

    使用 continue 改为声明:

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

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

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

        3
  •  5
  •   tanascius    17 年前

    你必须使用 continue;

        4
  •  5
  •   TheTXI    17 年前

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

        5
  •  1
  •   Simon P Stevens    17 年前

    与其抛出异常,不如先尝试检查用户是否有效。抛出异常非常昂贵,实际上只应在“特殊”情况下使用,而不是控制应用程序的逻辑流程,这不是它们应该用来做的,因为你预计一些用户会失败。

        6
  •  0
  •   Crash893    17 年前

    为什么不什么都不使用,而是继续?

    请改用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() );