5

このstackoverflowの質問で、ADを操作するためのコードを見てきました

using ステートメントについて混乱しています。WebClient など、メモリ リークが発生する可能性があるのではないかと心配しているものに使用されているだけだと思いました...

ともかく:

using (var context = new PrincipalContext( ContextType.Domain )) 
 {
      using (var user = UserPrincipal.FindByIdentity( context, "username" ))
      {
          var groups = user.GetAuthorizationGroups();
          ...
      }
 }

行に到達するとvar groups = user.GetAuthorizationGroups()-ユーザーはnullであるため、その行はNullReferenceで失敗します。デバッグにマウスを合わせると、null が表示され、次に静的メンバーが表示され、すべての値が表示されます。

using ステートメントから行を削除し、必要に応じてvar user = UserPrincipal.FindByIdentity( context, "username" )ユーザーにデータを入力するだけです。

どうしたの ???

編集:私は詰め込んで、偽のユーザー名を送信していました. 奇妙なことに、デバッグ中に変数をチェックすると、偽のユーザー ID を送信した場合、ユーザーが完全に null であると予想されますが、user: null、静的メンバーの下に表示され、現在ログインしているものの値がありました-だから私はそれが潜在的に using ステートメントに関係していると思った。乾杯!

4

3 に答える 3

3

あなたが説明していることは起こり得ません。ステートメントの特殊性はusing、オブジェクトが破棄されるときにブロックが完了するまで発生しません。したがって、そのブロック内では、ステートメントuser内にあるかどうかに関係なく、変数は同じです。using

于 2011-08-05T04:23:17.117 に答える
2

using は、try/finally のシンタックス シュガーにすぎず、IDisposable を実装するオブジェクトで Dispose を自動的に呼び出します。

于 2011-08-05T04:26:59.953 に答える
1

C# の "using" ステートメントは、IDisposable オブジェクトを正しく使用するための便利な構文を提供します。PrincipalContext に使い捨てメソッドがあるかどうか、または IDisposable が実装されているかどうかを確認してください。そうでない場合は、「using」を使用しないでください。詳細については、 MSDN のドキュメントを参照してください。

于 2011-08-05T04:26:01.513 に答える