我看过一些使用 AD in this stackoverflow question 的代码
我对 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。当我将鼠标悬停在它上面进行调试时,它显示 null,然后显示静态成员,并具有所有值。
如果我从 using 语句中取出一行,并且只使用 var user = UserPrincipal.FindByIdentity( context, "username")
用户根据需要填充。
这是怎么回事???
编辑:我填空并发送了一个虚假的用户名。奇怪的是,当我在调试期间检查变量时,如果我发送了伪造的用户 ID,您会期望用户完全为 null,但它显示在用户下:null,静态成员,并且有我当前登录的值 -所以我认为这可能与 using 语句有关。 干杯!
最佳答案
您所描述的情况不会发生。 using
语句的特殊性在 block 完成之前不会发生,当对象被释放时。所以在该 block 内,user
变量是相同的,无论它是否在 using
语句中。
关于c# - 与 C# 'using' 混淆,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6951362/