6
votes

Analyse booléenne de la section de configuration dans web.config

J'ai une section de configuration personnalisée dans mon web.config.

Une de mes classes est saisir à partir de ceci: p> xxx pré>

J'ai des choses qui travaillent pour analyser si je ont vrai ou faux, cependant si l'attribut est vide, je reçois des erreurs. Lorsque la section de configuration tente de cartographier la classe à la section de configuration, je reçois une erreur de "non une valeur valide pour bool" sur la partie "Nisulable". P>

Comment puis-je analyser "" comme false dans mon CLASSE MYCONFIGSECTION? P>

J'ai essayé ceci: p> xxx pré>

mais quand j'essaie d'utiliser ce qui est retourné comme: P>

'Cannot implicitly convert type 'bool?' to 'bool'. An explicit conversion exists (are you missing a cast?)  


0 commentaires

4 Réponses :


0
votes
if (myConfigSection.LabelsVisible.HasValue)
{
    graph.Label.Visible = myConfigSection.LabelsVisible.Value;
}

2 commentaires

Et si myconfigsection.labelsvisible.hasvalue est false ?


Ensuite, graphique.Label.visible ne changera pas sa valeur. L'OP n'a pas spécifié le comportement souhaité au cas où Labelvisible = "" dans son fichier de configuration.



3
votes

C'est un peu dangereux, mais techniquement fonctionne: (vous obtenez une invalidoProvirationException si la valeur de la nullable est bien nulle):

bool defaultValue = true;
graph.Label.Visible = myConfigSection.LabelsVisible ?? defaultValue;


0 commentaires

2
votes

Essayez:

graph.Label.Visible = myConfigSection.LabelsVisible.HasValue ? myConfigSection.LabelsVisible.Value : false;


2 commentaires

Autre version est: graphum.label.visible = myconfigsection.labelsvisible.value ?? faux;


@jaloplo: Non. MyConfigsection.LabelsVisible.Value est de type BOOL mais l'opérateur ?? est réservé pour les opérandes de gauche de type de référence .



8
votes

Votre problème est que graph.label.visible code> est de type bool code> mais myconfigsection.labelsvissible code> est de type bool? . Il n'y a pas de conversion implicite de bool? Code> à bool code> car cette conversion de rétrécissement. Il existe plusieurs façons de résoudre ce moyen:

1: Cast MyConfigsection.LabelsVisible code> à un BOOL code>: p>

[ConfigurationProperty("labelsVisible", DefaultValue = true, IsRequired = false)]
public bool LabelsVisible {
    get {
        bool? b= (bool?)this["labelsVisible"];
        return b.HasValue ? b.Value : true;
    }
}


2 commentaires

Merci pour l'explication. Ceci est extrêmement utile. Quel est spécifiquement le '?' à la fin de 'Bool?' appelé? NullableType?


La syntaxe t? t est un type de valeur est une courte façon de dire nullable .