我的web.config中有一个自定义配置部分。
我的一门课就是从中学习的:
<myConfigSection LabelVisible="" TitleVisible="true"/>
如果有true或false,我可以进行解析,但是如果属性为空,则会出现错误。当配置部分尝试将类映射到配置部分时,在“LabelVisible”部分出现错误“无效的 bool 值”。
如何在myConfigSection类中将“”解析为false?
我已经试过了:
[ConfigurationProperty("labelsVisible", DefaultValue = true, IsRequired = false)]
public bool? LabelsVisible
{
get
{
return (bool?)this["labelsVisible"];
}
但是当我尝试使用返回的内容时,像这样:
graph.Label.Visible = myConfigSection.LabelsVisible;
我收到以下错误:
'Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)
最佳答案
您的问题是graph.Label.Visible
的类型为bool
,而myConfigSection.LabelsVisible
的类型为bool?
。没有从bool?
到bool
的隐式转换,因为这是一个狭窄的转换。有几种方法可以解决此问题:
1:将myConfigSection.LabelsVisible
转换为bool
:
graph.Label.Visible = (bool)myConfigSection.LabelsVisible;
2:从
bool
中提取基础myConfigSection.LabelsVisible
值:graph.Label.Visible = myConfigSection.LabelsVisible.Value;
3:当
myConfigSection.LabelsVisible
表示null
值时,添加捕获逻辑:graph.Label.Visible = myConfigSection.LabelsVisible.HasValue ?
myConfigSection.LabelsVisible.Value : true;
4:将此逻辑插入
myConfigSection.LabelsVisible
:[ConfigurationProperty("labelsVisible", DefaultValue = true, IsRequired = false)]
public bool LabelsVisible {
get {
bool? b= (bool?)this["labelsVisible"];
return b.HasValue ? b.Value : true;
}
}
这是后两种方法之一,最好避免在
myConfigSection.LabelsVisible
表示null
值时使用其他解决方案时可能发生的某些异常。最好的解决方案是将此逻辑内部化到myConfigSection.LabelsVisible
属性getter中。