c# - 与 C# 'using' 混淆

标签 c# active-directory using userprincipal

我看过一些使用 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/

相关文章:

sql-server - 在SQL Server存储过程中获取当前用户

c# - DbContext 获取在使用区域内处理

c# - using语句中的异步方法

c# - 覆盖属性不起作用

c# - 为 Delphi 应用程序编写 .NET (C#) dll

c# - 如何制作完全由用户定义的自定义 GridView

c# - 如何在 Active Directory 中对密码更改进行客户端验证

encoding - Active Directory 中 unicodePwd 的正确编码

c# - 在 Web 请求的 "try/catch"语句中嵌入 "using"是否可以?我的代码正确吗?

javascript - 将 javascript 双按位转换为 C#