我的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中。

10-07 23:09