Convertir des.ToBoolean échoue avec “0” valeur
Je suis en train de convertir la valeur "0"
( System.String
) à son Boolean
représentation, comme:
var myValue = Convert.ToBoolean("0"); //throwing an exception here
J'ai regardé le Page MSDN, et dans le code-bloc de l'échantillon, j'ai trouvé ces lignes:
ConvertToBoolean("0");
//...
Unable to convert '0' to a Boolean.
Dans mon code, je suis à la conversion à partir de la System.String
à Boolean
comme ceci:
//will be OK, but ugly code
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
- Est-il un autre moyen pour convertir à la
Boolean
type avec pas laid code? - Pourquoi une telle exception se produire? En raison de la conversion à partir de la référence type de
System.String
pour le type de valeur de laSystem.Boolean
, maisSystem.Int32
est également un type de valeur, n'est-ce pas?
- L'exemple de la référence est de montrer qu'il y a des chaînes non valides que les ToBoolean() la méthode de la rejeter. En plus de "0", ils montrent des exemples de "TrueString" et de la chaîne.Vide. L'échantillon est de montrer que ces ne sont pas valides, non pas que vous pouvez réellement utiliser ces valeurs.
- pourquoi ne pas utiliser le var res="1yestrue".Contient(yourVar)? Il y a aussi des Booléens.Parse() / Boolean.TryParse() ?
Vous devez vous connecter pour publier un commentaire.
Ce qui se passe parce que
Convert.ToBoolean
attend l'une des opérations suivantes:"True"
(String) =true
"False"
(String) =false
0
(type numérique; int, double, float, etc.) =false
0
(type numérique; ...) =true
null
=false
Tout autres valeur n'est pas valide pour
Boolean
.Vous avez déjà obtenu une propre approche:
Edit: Vous pouvez créer une méthode d'extension qui va gérer quelques-uns de ces cas pour vous, alors de cacher la laideur de la manipulation de la conversion.
Cette extension fournit une interprétation très large de
Boolean
:"True"
(String) =true
"False"
(String) =false
"0"
(String) =false
true
Code:
Alternativement, si vous voulez une approche stricte, qui suit ce que l' .NET Framework attend; puis il suffit d'utiliser
try/catch
états:Quoique, pas un propre ou assez approche, mais elle garantit plus de possibilités d'obtenir la valeur correcte. Et, le
Extensions
classe est à l'écart de vos données/code de commerce.En fin de compte, votre code de conversion est relativement simple à utiliser:
"0"
est pas"True"
ou"False"
. Le uniquement représentation de chaîne est accepté"True"
ou"False"
.Extensions
méthodes.Car c'est vraiment une question de toujours faire ces conversions et tels, que diriez-vous d'une méthode d'extension?
et alors que vous pouvez l'utiliser comme ceci:
et maintenant vous pouvez facilement étendre cette méthode à manipuler, même plus, si l'on voulait.
Pour une conversion réussie à se produire, la valeur du paramètre doit être égal soit
Boolean.TrueString
, une constante dont la valeur estTrue
,Boolean.FalseString
, une constante dont la valeur estFalse
, ou il doit être null. En comparant la valeur Booléenne.TrueString et Boolean.FalseString, la méthode ne tient pas compte de cas ainsi que d'attaque et de fuite des blancs de l'espace.de MSDN
parce que
Convert.ToBoolean
s'attend à un vrai si la valeur n'est pas égale à zéro; sinon, false. valeur numérique etTrue
ouFalse
String
valeur.Si vous savez qu'il serait un int, alors vous pouvez le convertir en int alors bool. La suite va essayer pour la conversion en booléen en tentant de la chaîne puis de tenter avec le numéro.
Assez rapide et simple:
Voici un très indulgent parser clés en dehors du premier caractère:
Vous pouvez l'appeler comme suit -: