与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语句有关。干杯!

与c# '混淆使用'

你所描述的不可能发生。using语句的特殊性直到块完成,即对象被处置时才会发生。因此,在该块中,user变量是相同的,无论它是否在using语句中。

using只是try/finally的语法糖,并自动对实现IDisposable的对象调用Dispose。

c#的"using"语句提供了一种方便的语法,确保正确使用IDisposable对象。检查PrincipalContext是否有一个disposable方法或实现了IDisposable。如果不是,那么你就不应该使用using。

相关文章:
  • 没有找到相关文章