I\'m trying to convert the value \"0\" ( System.String ) to its Boolean representation, like:
var myValue = Convert.To
This is happening because Convert.ToBoolean is expecting one of the following:
truefalse0 (numerical type; int, double, float, etc.) = false0 (numerical type; ...) = truenull = falseAny other value is invalid for Boolean.
You've already got a clean approach:
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
Edit: You can create an extension method that will handle a few of these cases for you, while hiding away the ugliness of handling the conversion.
This extension provides a very loose interpretation of Boolean:
"True" (String) = true"False" (String) = false"0" (String) = falsetrueCode:
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");
}
}
Alternatively, if you want a more strict approach, which follows what the .NET Framework expects; then simply use try/catch statements:
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;
}
}
Albeit, not a clean or pretty approach, but it guarantees more possibilities of getting the correct value. And, the Extensions class is tucked away from your data/business code.
In the end, your conversion code is relatively simple to use:
String myString = "1";
Boolean myBoolean = myString.ToBoolean();