Boolean cast指定的强制转换无效错误

Mat*_*ewD 5 c# checkbox casting

我目前正在存储checkbox.Checked值的复选框的true/false状态,以便在下次加载表单时重置.

加载表单后,我得到了值并设置了这样的复选框.

string value = (string)Registry.GetValue(@"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad", "SpaceBetween1", null);
if (value != null)
{
    if (value == "True")
    {
        checkBox1.Checked = true;
    } Else {
        checkBox1.Checked = false;
    }
}
Run Code Online (Sandbox Code Playgroud)

这有效,但我觉得可能有更好的方法.

我试过这个

checkBox1.Checked = (Boolean)Registry.GetValue(@"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad", "SpaceBetween1", null);
Run Code Online (Sandbox Code Playgroud)

但它给了我一个"Specified cast is not valid."错误.

该值将作为REG_SZ存储在注册表中.不确定这是否导致他发出.

在此输入图像描述

我已经搜索了如何解决这个问题但是没有找到一个以这种方式完成的情况.

有没有更好的方法将字符串值强制转换为布尔值并将其分配给复选框?

Hab*_*bib 7

使用Convert.ToBoolean,因为Registry.GetValue将返回一个object,如果它是类型bool或如果它包含字符串true/false,你将得到结果.

例如:

object obj = "true";
bool b = (bool) obj; //This will fail
bool b2 = Convert.ToBoolean(obj); //This will work. 
Run Code Online (Sandbox Code Playgroud)

  • @GianPaolo,要使用`Parse`,你必须先将其转换/转换为字符串.`Convert.ToBoolean`避免了这种情况. (3认同)

das*_*ght 7

由于您从注册表中读取的值的类型是a string,因此无法强制转换它.但是,你可以转换它:

checkBox1.Checked = Convert.ToBoolean(
    Registry.GetValue(
        @"HKEY_CURRENT_USER\Software\CompanyName\AddressLoad"
    ,   "SpaceBetween1"
    ,   null
    )
);
Run Code Online (Sandbox Code Playgroud)