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)