[英]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.