C#:找到合适的对象与使用相结合是否有一个干净的模式?

Voi*_*tar 6 c# registry using null-coalescing-operator

我想要一个简洁安全的干净/紧凑模式rulesKey,即使抛出某些东西也会妥善处理.这似乎是不可能的using(除非可能4 using秒,但看起来如此冗长并打开额外的资源,我甚至可能不需要打开).让我感到惊讶的是,这在C++中会如此直接/轻松.有一个很好的解决方案吗?

{
    RegistryKey rulesKey = null;
    rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Internal\\Product");
    rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Company\\Internal\\Product");
    rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Product");
    rulesKey = rulesKey ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Product");

    // Code using rulesKey, might throw

    rulesKey.Close();
}
Run Code Online (Sandbox Code Playgroud)

AGB*_*AGB 8

你可以用

using (RegistryKey rulesKey = Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Internal\\Product")
                                ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Company\\Internal\\Product")
                                ?? Registry.LocalMachine.OpenSubKey("Software\\Wow6432Node\\Company\\Product")
                                ?? Registry.LocalMachine.OpenSubKey("Software\\Company\\Product"))
{
    //use rulesKey here
}
Run Code Online (Sandbox Code Playgroud)

以来

using语句确保即使在对象上调用方法时发生异常,也会调用Dispose.您可以通过将对象放在try块中然后在finally块中调用Dispose来实现相同的结果; 实际上,这就是编译器如何翻译using语句.MSDN