c# - 使用更改使用变量的语句

标签 c# using using-statement

我想使用 using 语句,但如果它应该指向的对象不存在,则可能需要更改我“使用”的变量的值。

我想到了这样的事情(对于注册表访问和 32/64 窗口 - 尽管这是我当前的用例,但这是一个普遍问题):

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
}

以上代码无法编译:

error CS1656: Cannot assign to 'key' because it is a 'using variable'

我可以通过不使用 using 而是 try/catch/finally 和/或在使用之前测试注册表项是否存在来解决这个问题。

有没有一种方法可以继续使用 using,然后处理正确的对象?

最佳答案

也许 Null 合并?

using (var key = Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\MS\Platform") ?? Microsoft.Win32.Registry.LocalMachine.OpenSubKey(@"SOFTWARE\Wow6432Node\MS\Platform"))
{

    // use key
}

关于c# - 使用更改使用变量的语句,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36602695/

相关文章:

c# - 在 C# 中使用 `using` 关键字避免多次处置的最佳实践

c# - 使用 LINQ 的 SQL Server 组

c# - 队列有时会损坏

c# - Stream.Dispose 是否总是调用 Stream.Close(和 Stream.Flush)

mysql - 如何使用 "USING"关键字连接三个表并使用mysql语法显示

c# - 何时隐式调用 `Dispose`来重构: using statement without scope,?

c# - 为什么 C# 自动属性不支持像 VB 2010 这样的默认值?

c# - C# 中的基准测试方法调用

c# - 调用 Dispose() 与对象超出范围/方法完成时的对比

c# - 嵌套 using 语句的最佳实践?