与c# '混淆使用'
本文关键字: | 更新日期: 2023-09-27 18:04:47
我在这个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()
- user是空的,所以行失败与NullReference。当我将鼠标移到它上面调试时,它显示为空,然后显示Static Members,并具有所有值。
如果我从using语句中取出这行,只按需要填充var user = UserPrincipal.FindByIdentity( context, "username" )
user。
这是怎么回事?
编辑:我塞了东西,发送了一个假的用户名。奇怪的是,当我在调试期间检查变量时,如果我发送虚假的userid,当您期望user完全为null时,但它显示在user: null,静态成员下,并且有我当前登录的值-所以我认为这可能与using语句有关。干杯!你所描述的不可能发生。using
语句的特殊性直到块完成,即对象被处置时才会发生。因此,在该块中,user
变量是相同的,无论它是否在using
语句中。
using只是try/finally的语法糖,并自动对实现IDisposable的对象调用Dispose。
c#的"using"语句提供了一种方便的语法,确保正确使用IDisposable对象。检查PrincipalContext是否有一个disposable方法或实现了IDisposable。如果不是,那么你就不应该使用using。