有些上下文,我在c#上仍然很新,但我一直在更新别人写的不完整的c#代码。我遇到过这个似乎给我一个错误的代码。
gblnEnableSSL = Convert.ToBoolean(Convert.ToInt32(Utils.GetSetting("Program", "Configuration", "SSL", "0")));
Utils.GetSetting("Program", "Configuration", "SSL", "0")
目前返回字符串"false"
。
我发现删除Convert.ToInt32()
可以解决我的问题。但是,我不相信有人只是添加了Convert.ToInt32()
来破坏了代码。我检查了回购,并惊讶地发现同一行的前一个代码用于:
gblnEnableSSL = Utils.GetSetting("Program", "Configuration", "SSL", "0").ToUpper() == "TRUE";
这似乎也有效。选中复选框的值是使用chkEnableSSL.Value = gblnEnableSSL;
我的问题是使用bool值或字符串值设置值之间是否存在差异。另外,chkEnableSSL.value
与chkEnableSSL.Checked
之间的差异是什么?
编辑:我没有使用前面的代码获得编译器或运行时错误。之后它不会执行代码。例如,我之后立即txtDataSource.Text = strDataSource;
除非我发表评论gblnEnableSSL = ...
或删除Convert.ToInt32()
,否则不会设置文字。
编辑: Convert.ToInt32()
会抛出异常,但在VS中没有中断,因为我没有检查“公共语言运行时异常”。
答案 0 :(得分:0)
看起来GetSetting
正在返回一个字符串。您给出的第一个代码示例是将此字符串转换为整数,然后将其转换为布尔值。唯一可行的方法是,为该键存储的字符串值是0还是1.在第二个代码块上,它看起来好像所使用的值不是0或1的字符串值,而是实际字符串值为true或false 。如果存储在配置文件中的值仍然是true或false格式,那么这就是您的第一行中断的原因。您不能将false或true字符串转换为int。看起来有人刚刚添加了一些东西来破解代码。
此外,您没有提到您正在使用的技术。您可以使用winforms,wpf,webforms或MVC。我将假设这是你正在使用的网络技术,因为checbox.value是我通常在javascript中看到的东西。在javascript中设置复选框值的一般共识是使用.prop()属性,该属性将字符串作为要更改的属性,将值作为第二个参数。例如。
$( "input" ).prop( "checked", true );
故事的道德是删除转换为int32并使用.prop()
设置该复选框:)