我已經看到了與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