簡體   English   中英

與C#“使用”混淆

[英]Confused with C# 'using'

我已經在這個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() -用戶為null,因此該行失敗,並顯示NullReference。 當我將鼠標懸停在它上面時,調試它顯示為null,然后顯示靜態成員,並具有所有值。

如果我不使用using語句,而只使用var user = UserPrincipal.FindByIdentity( context, "username" )則根據需要填充用戶。

發生什么了 ???

編輯:我塞滿了並且正在發送假的用戶名。 奇怪的是,雖然當我在調試過程中檢查變量時,當您發送假的用戶ID時,您希望用戶完全為null,但是它顯示在user下:null,靜態成員,並且具有我當前登錄狀態的值-所以我認為這可能與using語句有關。 干杯!

您所描述的不會發生。 using語句的特殊性直到對象完成處理的塊完成后才發生。 因此,在該塊內,無論user變量是否在using語句中, user變量都是相同的。

using只是用於try / finally的語法糖,並在實現IDisposable的對象上自動調用Dispose。

C#“ using”語句提供了一種方便的語法,可確保正確使用IDisposable對象。 檢查PrincipalContext是否具有可拋棄方法或實現IDisposable。 如果不是,那么您不應使用“ using”。 有關更多詳細信息,請參見MSDN文檔

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM