J'ai une section de configuration personnalisée dans mon web.config.
Une de mes classes est saisir à partir de ceci: p> 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> 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?)
4 Réponses :
if (myConfigSection.LabelsVisible.HasValue) { graph.Label.Visible = myConfigSection.LabelsVisible.Value; }
Et si myconfigsection.labelsvisible.hasvalue code> est
false code>?
Ensuite, graphique.Label.visible code> ne changera pas sa valeur. L'OP n'a pas spécifié le comportement souhaité au cas où
Labelvisible = "" code> dans son fichier de configuration.
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;
Essayez:
graph.Label.Visible = myConfigSection.LabelsVisible.HasValue ? myConfigSection.LabelsVisible.Value : false;
Autre version est: graphum.label.visible = myconfigsection.labelsvisible.value ?? faux;
@jaloplo: Non. MyConfigsection.LabelsVisible.Value Code> est de type
BOOL code> mais l'opérateur
?? code> est réservé pour les opérandes de gauche de type de référence .
Votre problème est que 1: Cast 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:
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;
}
}
Merci pour l'explication. Ceci est extrêmement utile. Quel est spécifiquement le '?' à la fin de 'Bool?' appelé? NullableType?
La syntaxe t? Code> où
t code> est un type de valeur est une courte façon de dire
nullable