Ich möchte mit Anweisung verwenden, aber müssen möglicherweise den Wert der Variablen ändern, die ich "verwende", wenn das Objekt, auf das es zeigen sollte, nicht existiert.Verwenden von Anweisung mit Ändern der verwendeten Variablen
Ich dachte an so etwas wie dieses (für Zugriff auf die Registry und 32/64 Fenster - obwohl dies meine aktuellen Anwendungsfall ist, ist dies eine allgemeine Frage):
using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MS\Platform"))
{
if (key == null)
key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\MS\Platform");
// use key
}
Above Code nicht kompiliert:
Ich kann dies lösen, indem ich mit nicht verwende, aber versuche/catch/finally, und/oder prüfe, ob der Registrierungsschlüssel existiert, bevor du ihn verwendest.
Gibt es eine Möglichkeit, mit weiter zu verwenden, nachdem das richtige Objekt entsorgt wurde?
Dieser Ausdruck kann ohne Änderung des Verhaltens, das heißt 'var key = ... in eine separate Variable extrahiert werden ?? ...; mit (Schlüssel) {...} '. Wenn der Ausdruck ausgelöst wird, gibt es keinen Schlüssel, der trotzdem entsorgt werden muss. Ausnahmen, die zwischen der Zuweisung und der 'using'-Anweisung geworfen werden, sind ebenso wahrscheinlich wie Ausnahmen, die zwischen der Erzeugung des temporären Objekts und seiner Übereinstimmung mit' Schlüssel 'innerhalb von' using' –
Yes good point geworfen werden. Sie können auch leicht herausfinden, welchen Wert Sie * vor * dem using-Block verwenden wollen und dann einfach die Variable in den using-Code einfügen. – Wjdavis5