Widziałem niektóre kodu do pracy z AD in this stackoverflow questionZmieszany z wykorzystaniem C# „”
Dostaję mylić o użyciu instrukcji. Myślałem, że to był tylko wykorzystywany do rzeczy, które są zaniepokojeni może stać wyciek pamięci, jak WebClient lub podobny ...
Zresztą:
using (var context = new PrincipalContext(ContextType.Domain))
{
using (var user = UserPrincipal.FindByIdentity(context, "username"))
{
var groups = user.GetAuthorizationGroups();
...
}
}
kiedy osiągnie linię var groups = user.GetAuthorizationGroups()
- użytkownik jest null , więc linia kończy się niepowodzeniem z NullReference. Kiedy mysz nad nim debugowanie pokazuje zero, a następnie pokazuje Static Members i ma wszystkie wartości.
Jeśli wyjmuje wiersz z użycia instrukcji i po prostu ma var user = UserPrincipal.FindByIdentity(context, "username")
użytkownik jest wypełniany zgodnie z wymaganiami.
Co się dzieje?
Edytuj: Wypchałem i wysyłałem fałszywą nazwę użytkownika. Dziwnie jednak, gdy sprawdzam zmienne podczas debugowania, kiedy można oczekiwać, że użytkownik będzie całkowicie zerowy, jeśli wyślę fałszywego identyfikatora użytkownika, ale wyświetli się on pod użytkownikiem: null, statyczni członkowie, a tam są wartości dla tego, w którym byłem aktualnie zalogowany. więc pomyślałem, że ma to związek z użyciem instrukcji potencjalnie. Pozdrawiam!
'using' jest dla wszystkiego, co implementuje' IDisposable'. –
Mówiąc bardziej ogólnie, powinieneś pomyśleć o używaniu instrukcji 'using' (i tym samym' IDisposable'), aby zapobiec * wyciekom zasobów *. Takie zasoby ostatecznie są "pamięcią", ale nie muszą być w bardziej abstrakcyjnym znaczeniu (jak uchwyt pliku, połączenie z bazą danych itp.). –
"Korzystanie z instrukcji" wpływa tylko na zmienną na końcu zakresu stosowania, w którym to momencie udostępnia ją. Czy jesteś pewien, że to nie jest niepoprawny użytkownik? (ponieważ UserPrincipal.FindByIdentity zwraca wartość null, jeśli nie zostanie znaleziony) – Will