Anfangs hatte ich einige Code wie folgt aus:Muss C# using Anweisung zugewiesen werden?
WindowsIdentity otherIdentity = // got that from somewhere else
WindowsImpersonationContext context = otherIdentity.Impersonate();
Ldap.DoStuff();
context.Undo();
context.Dispose();
Zu wissen, dass WindowsImpersonationContext
implementiert IDisposable
und Dispose()
nennt auch Undo()
, ich glaube, sollte ich using
stattdessen werden:
using (var context = otherIdentity.Impersonate())
{
// Run as other user
Ldap.DoStuff();
}
Nun ReSharper richtig bemerkt dass ich context
nicht verwende und vorschlage, die Zuordnung zu entfernen. Funktioniert das auch? Um welchen Code erweitert es sich zur Kompilierzeit?
using (otherIdentity.Impersonate())
{
Ldap.DoStuff();
}
Um zu testen, ob das funktioniert, bauen und ausführen. – adv12
@ adv12: Es wird auf jeden Fall funktionieren, egal ob das Objekt entsorgt wird oder nicht, und der Müllsammler entsorgt es trotzdem irgendwann. Aber selbst wenn 'using' es entsorgt, frage ich mich wie. Behält die Anweisung eine unbenannte Referenz des Ausdrucksergebnisses bei? Von allen Ausdrucksergebnissen? Die Dokumentation erwähnt nie, dass ... – Hannobo
Ich würde 'try-finally' anstelle von' using' hier verwenden. Der Widerruf von Identitätswechsel ist wichtig und sollte im Code hervorgehoben, nicht versteckt werden. –