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()- 用户为空,因此该行因 NullReference 而失败。当我将鼠标悬停在调试上时,它显示空值,然后显示静态成员,并具有所有值。

如果我从 using 语句中取出这一行,并var user = UserPrincipal.FindByIdentity( context, "username" )根据需要填充用户。

发生什么了 ???

编辑:我塞满并发送了一个虚假的用户名。奇怪的是,虽然当我在调试期间检查变量时,如果我发送虚假的用户 ID,你会期望用户完全为空,但它显示在用户下:空,静态成员,并且有我当前登录的值 -所以我认为这可能与 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。如果没有,那么你不应该使用“使用”。有关详细信息,请参阅MSDN 文档。

于 2011-08-05T04:26:01.513 回答