[英]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.