发生这种情况是因为Convert.ToBoolean
预计会出现以下情况之一:
任何其他值都对 无效Boolean
。
你已经有了一个干净的方法:
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
编辑:您可以创建一个扩展方法来为您处理其中一些情况,同时隐藏处理转换的丑陋。
这个扩展提供了一个非常松散的解释Boolean
:
"True"
(字符串)=true
"False"
(字符串)=false
"0"
(字符串)=false
- 任何其他字符串 =
true
代码:
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");
}
}
或者,如果您想要一种更严格的方法,它遵循 .NET Framework 的预期;然后只需使用try/catch
语句:
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;
}
}
尽管这不是一个干净或漂亮的方法,但它保证了获得正确值的更多可能性。而且,该Extensions
课程远离您的数据/业务代码。
最后,您的转换代码使用起来相对简单:
String myString = "1";
Boolean myBoolean = myString.ToBoolean();