与C#'使用'混淆

bar*_*ron 5 c# using active-directory userprincipal

在这个stackoverflow问题中看到了一些使用AD的代码

我对使用声明感到困惑.我认为它只是用于你担心可能会成为内存泄漏的东西,比如WebClient或者类似的......

无论如何:

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

当我到达该行时var groups = user.GetAuthorizationGroups()- user为null,因此该行失败并显示NullReference.当我鼠标悬停它调试它显示null,然后显示静态成员,并具有所有值.

如果我从use语句中取出该行,只需var user = UserPrincipal.FindByIdentity( context, "username" )根据需要填充用户.

发生什么了 ???

编辑:我塞满了,发送了一个伪造的用户名.奇怪的是,当我在调试期间检查变量时,如果我发送伪造的用户ID,你会期望用户完全为空,但是它显示在user:null,静态成员下,并且我有当前登录的值 - 所以我认为这可能与使用声明有关.干杯!

Joe*_*nos 3

你所描述的情况不可能发生。using直到块完成、对象被释放时,语句的特殊性才会发生。因此,在该块内,user无论是否在语句中,变量都是相同的using