Convert.ToBoolean以“0”值失败
我正在尝试将值"0"
( System.String
)转换为其Boolean
表示forms,如:
var myValue = Convert.ToBoolean("0"); // throwing an exception here
我查看了MSDN页面 ,在代码示例块中,我找到了这些行:
ConvertToBoolean("0"); // ... Unable to convert '0' to a Boolean.
在我的代码中,我正在从System.String
转换为Boolean
如下所示:
// will be OK, but ugly code var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
发生这种情况是因为Convert.ToBoolean
期望以下之一:
Boolean
值的任何其他值都无效。
你已经有了一个干净的方法:
var myValue = Convert.ToBoolean(Convert.ToInt32("0"));
编辑:您可以创建一个扩展方法,为您处理一些这样的情况,同时隐藏处理转换的丑陋。
这个扩展提供了一个非常宽松的Boolean
解释:
码:
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();
public static class BooleanParser { public static bool SafeParse(string value) { var s = (value ?? "").Trim().ToLower(); return s == "true" || s == "1"; } }
既然这仍然是那些转换的问题,那么扩展方法呢?
public static class Extensions { public static bool ToBool(this string s) { return s == "0" ? false : true; } }
所以你会像这样使用它:
"0".ToBool();
现在你可以轻松地扩展这个方法来处理更多的情况,如果你想要的话。
要成功进行转换,value参数必须等于Boolean.TrueString
,值为True
的常量, Boolean.FalseString
,值为False
的常量,或者必须为null。 在将值与Boolean.TrueString和Boolean.FalseString进行比较时,该方法忽略大小写以及前导和尾随空格。
来自MSDN
因为Convert.ToBoolean
需要一个true,如果value不为零; 否则,是的。 数值和True
或False
String
值。
如果你知道它将是一个int,那么你可以将它转换为int然后转换为bool。 以下将尝试通过尝试字符串然后尝试使用数字转换为bool。
public bool ToBoolean(string value) { var boolValue = false; if (bool.TryParse(value, out boolValue )) { return boolValue; } var number = 0; int.TryParse(value, out number)) return Convert.ToBoolean(number); }
足够快速和简单:
public static class Extensions { static private List trueSet = new List { "true","1","yes","y" }; public static Boolean ToBoolean(this string str) { try { return trueSet.Contains(str.ToLower()); } catch { return false; } } }
这是一个非常宽容的解析器,可以键入第一个字符:
上述就是C#学习教程:Convert.ToBoolean以“0”值失败分享的全部内容,如果对大家有所用处且需要了解更多关于C#学习教程,希望大家多多关注—计算机技术网(www.ctvol.com)!
public static class StringHelpers { /// /// Convert string to boolean, in a forgiving way. /// /// String that should either be "True", "False", "Yes", "No", "T", "F", "Y", "N", "1", "0" /// If the trimmed string is any of the legal values that can be construed as "true", it returns true; False otherwise; public static bool ToBoolFuzzy(this string stringVal) { string normalizedString = (stringVal?.Trim() ?? "false").ToLowerInvariant(); bool result = (normalizedString.StartsWith("y") || normalizedString.StartsWith("t") || normalizedString.StartsWith("1")); return result; } }
本文来自网络收集,不代表计算机技术网立场,如涉及侵权请联系管理员删除。
ctvol管理联系方式QQ:251552304
本文章地址:https://www.ctvol.com/cdevelopment/1012467.html