9

単純なログインでActiveDirectoryベースからオブジェクトを作成しようとしています。問題は、ログイン情報の一部が有効であるということです。

例外がスローされた場合に次のログインにスキップするように、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

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 に答える
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 に答える