Convert.ToBoolean和Boolean.Parse不接受0和1
为什么决定parsing一个布尔值时,0/1是不可接受的?
parsing任何整数types的值时,它接受数字string进行parsing。 (如果.NET能够parsingstring“一万二千六百五十八千六百五十”我会感到惊讶)。
什么使布尔人特别? 他们基本上是0,而且我的经验是非零的。
有没有一个bcl方法来parsing这样的string,如果没有,为什么?
注意:我忘了在string“0”和“1”中指定。 好奇的是,如果已经是一个整数,它如我所料地工作。 也许这会造成混乱。
0和(not-zero)不等于“false”和“true”,它们只是由Cselect的表示。其他语言使用0表示真,-1表示假或其他scheme。 布尔值不是 0或1,它是一个真或假。
它是否也应该处理“是”,“否”,“关”和“开”以及与布尔类似的所有其他事情? 你会在哪里画线?
什么使布尔人特别? 他们基本上是0,而且我的经验是非零的。
这是一个实施细节,并不完全相关。
true
是一个布尔值。 false
是一个布尔值。 别的什么都不是。
如果你想parsing的东西,如果string“0”评估为false
而其他任何评估为true
,你可以使用:
!mystr.Equals("0");
下面显示的共享FormatHelper
类提供了一个简单的解决scheme,它使用两个称为StringToBoolean
的重载方法的变体。
FormatHelper.StringToBoolean(String value) FormatHelper.StringToBoolean(String value, Boolean NullOrEmptyDefault)
两种变体都提供了一个不区分大小写的string匹配
1)从string到布尔值的正常转换将空string或空string默认为false
以下示例将导致boolean
值为false
: –
Boolean myBool = FormatHelper.StringToBoolean(""); Boolean myBool = FormatHelper.StringToBoolean("0"); Boolean myBool = FormatHelper.StringToBoolean("false"); Boolean myBool = FormatHelper.StringToBoolean("False"); Boolean myBool = FormatHelper.StringToBoolean("no"); Boolean myBool = FormatHelper.StringToBoolean("off");
所有其他string值将导致Boolean
值为true
例如: –
Boolean myBool = FormatHelper.StringToBoolean("1"); Boolean myBool = FormatHelper.StringToBoolean("true"); Boolean myBool = FormatHelper.StringToBoolean("True"); Boolean myBool = FormatHelper.StringToBoolean("yes"); Boolean myBool = FormatHelper.StringToBoolean("xyz blah");
注意:在下面的类中编辑BooleanStringOff
的值,以包含更多(或更less)的false / off值
2)遵循与上述1)相同的规则,但允许默认值为true
作为转换的第二个参数。
当String
值为空或null
值时使用默认值。 如果缺less的string值需要表示一个true
状态,这很有用。
以下代码示例将返回true
Boolean myBool = FormatHelper.StringToBoolean("",true);
以下代码示例将返回false
Boolean myBool = FormatHelper.StringToBoolean("false",true);
这是FormatHelper
类的代码
public class FormatHelper { public static Boolean StringToBoolean(String str) { return StringToBoolean(str, false); } public static Boolean StringToBoolean(String str, Boolean bDefault) { String[] BooleanStringOff = { "0", "off", "no" }; if (String.IsNullOrEmpty(str)) return bDefault; else if(BooleanStringOff.Contains(str,StringComparer.InvariantCultureIgnoreCase)) return false; Boolean result; if (!Boolean.TryParse(str, out result)) result = true; return result; } }
不幸的是,这在.NET中发生了很多。 例如,我不记得它是XML序列化程序还是XmlConvert,但是如果True / False的大小写不正确,其中一个会失败。
你可以通过整数来得到你想要的东西。
string s = "2"; int i = Convert.ToInt32(s); bool b = Convert.ToBoolean(i);
在上面的情况下,任何非零值都将评估为true。
出于这个原因,我创build了一个我所使用的称为ConversionStrategy的类,它考虑了源types和目标types,并select了最理想(和灵活)的转换策略来进行转换。
你想Convert.ToBoolean(int value)
不知道怎么了parsing方法:-)
代码没有用处:
int falseInt = 0; int trueInt = 1; bool falseBool; bool trueBool; if (bool.TryParse(falseInt.ToString(), out falseBool)) { if (!falseBool) { MessageBox.Show("TryParse: False"); } } if (bool.TryParse(trueInt.ToString(), out trueBool)) { if (!trueBool) { MessageBox.Show("TryParse: True"); } } falseBool = Convert.ToBoolean(falseInt); trueBool = Convert.ToBoolean(trueInt); if (!falseBool) { MessageBox.Show("Convert: False"); } if (trueBool) { MessageBox.Show("Convert: True"); }
这个怎么样?
byte i = 1; //or 0 bool myBool = BitConverter.ToBoolean(new byte[] { i }, 0)
- ASP.NET MVC:从视图访问控制器实例
- ExpandoObject,DynamicObject和dynamic之间的区别
- 我如何String.Format在.NET中自定义格式的TimeSpan对象?
- Winforms TableLayoutPanel以编程方式添加行
- 我如何在接口上实现静态方法?
- Html.Partial与Html.RenderPartial&Html.Action与Html.RenderAction
- 资源(.resx)文件的好处是什么?
- MSBuild ProjectReference:private(“Copy Local”) – 允许的值和行为是什么?
- .Net WebBrowser.DocumentText不改变!