繁体   English   中英

与C#“使用”混淆

[英]Confused with C# 'using'

我已经在这个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语句有关。 干杯!

您所描述的不会发生。 using语句的特殊性直到对象完成处理的块完成后才发生。 因此,在该块内,无论user变量是否在using语句中, user变量都是相同的。

using只是用于try / finally的语法糖,并在实现IDisposable的对象上自动调用Dispose。

C#“ using”语句提供了一种方便的语法,可确保正确使用IDisposable对象。 检查PrincipalContext是否具有可抛弃方法或实现IDisposable。 如果不是,那么您不应使用“ using”。 有关更多详细信息,请参见MSDN文档

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM