我已经看到了与AD in this stackoverflow question困惑与C#“使用”
我越来越感到困惑using语句工作的一些代码。我认为它只是用来事情,你担心可能成为内存泄漏,就像一个Web客户端,或类似的...
总之:
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.FindByIdentity(context, "username"))
{
var groups = user.GetAuthorizationGroups();
...
}
}
当我到达行var groups = user.GetAuthorizationGroups()
- 用户为空,因此该行失败并带有NullReference。当我将鼠标移到它上面时,调试它显示为空,然后显示静态成员,并具有所有值。
如果我从使用声明中删除该行,并且只是根据需要填充了var user = UserPrincipal.FindByIdentity(context, "username")
用户。
所以发生了什么?
编辑:我塞满了,并发送了一个假的用户名。奇怪的是,当我在调试过程中检查变量时,如果我发送虚假用户标识,但是它显示在用户下:null,静态成员,并且那里有我当前登录的值,所以我认为这是与潜在的使用陈述有关。 干杯!
'using'用于实现'IDisposable'的任何事物。 –
更笼统地说,您应该考虑使用'using'语句(并因此使用'IDisposable')来防止*资源泄漏*。这些资源最终是“内存”,但不一定要处于更抽象的意义上(如文件句柄,数据库连接等)。 –
“使用”语句仅影响使用范围末尾的变量,此时它将处理该变量。你确定它不是无效的用户吗? (因为UserPrincipal.FindByIdentity如果未找到,则返回null) – Will