Dies geschieht, weil Convert.ToBoolean
ist eine der folgenden erwartet:
"True"
(String) = true
"False"
(String) = false
0
(numerische Typ; int, double, float, etc.) = false
- Beliebig nicht
0
(numerischer Typ; ...) = true
null
= false
Alle andere Wert ist ungültig für Boolean
.
Sie haben bekam bereits einen sauberen Ansatz:
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
Edit: Sie können eine Erweiterungsmethode erstellen, die einige dieser Fälle für Sie behandeln wird, während das Versteck entfernt Hässlichkeit der Handhabung der Umwandlung.
Diese Erweiterung bietet eine sehr freie Interpretation von Boolean
:
"True"
(String) = true
"False"
(String) = false
"0"
(String) = false
- Jede andere Zeichenfolge =
true
Code:
public static class Extensions
{
public static Boolean ToBoolean(this string str)
{
String cleanValue = (str ?? "").Trim();
if (String.Equals(cleanValue, "False", StringComparison.OrdinalIgnoreCase))
return false;
return
(String.Equals(cleanValue, "True", StringComparison.OrdinalIgnoreCase)) ||
(cleanValue != "0");
}
}
Alternativ, wenn Sie einen strengeren Ansatz wollen, das, was erwartet das .NET Framework folgt; dann einfach try/catch
Anweisungen verwenden:
public static class Extensions
{
public static Boolean ToBoolean(this string str)
{
try
{
return Convert.ToBoolean(str);
}
catch { }
try
{
return Convert.ToBoolean(Convert.ToInt32(str));
}
catch { }
return false;
}
}
Wenn auch keine sauber oder ziemlich Ansatz, aber es mehr Möglichkeiten, den richtigen Wert garantiert bekommen. Und die Extensions
Klasse ist von Ihrem Daten/Business-Code versteckt.
Am Ende der Conversion-Code ist relativ einfach zu bedienen:
String myString = "1";
Boolean myBoolean = myString.ToBoolean();
Das Beispiel zeigt Ihnen, Referenz ist, dass es ungültige Strings, Die ToBoolean() -Methode wird abgelehnt. Zusätzlich zu "0" zeigen sie Beispiele für "TrueString" und "String.Empty". Das Beispiel zeigt, dass diese ungültig sind, nicht dass Sie diese Werte tatsächlich verwenden können. –
Warum nicht var res = "1yestrue" verwenden. Enthält (yourVar)? Es gibt auch Boolean.Parse()/Boolean.TryParse()? – Bernhard