为什么在解析布尔值时决定不接受0/1?
解析任何整数类型值时,它接受要解析的数字字符串.(如果.NET可以解析字符串"一亿二十六万五千八百六十五"我会感到惊讶).
是什么让布尔特别?它们基本上都是假的0,而根据我的经验非零是真的......
是否有一个bcl方法来解析这样的字符串,如果没有,为什么?
注意:我忘了在字符串"0"和"1"中指定.好奇但是如果已经是一个int,它就像我预期的那样工作.也许这引起了混乱.
Ari*_*yck 66
0和(非零)不等于"假"和"真",它们只是由C选择的表示.其他语言使用0表示真,-1表示假,或完全是其他方案.布尔值不是 0或1,它是真或假.
它是否应该处理"是"和"否","关闭"和"打开",以及所有其他类似于布尔的事情?你会在哪里划线?
Ano*_*on. 30
是什么让布尔特别?它们基本上都是假的0,而根据我的经验非零是真的......
这是一个实现细节,并没有任何相关性.
true是一个布尔值.false是一个布尔值.别的不是.
如果要解析某些内容,使得字符串"0"在评估false其他任何内容时进行评估true,则可以使用:
!mystr.Equals("0");
Run Code Online (Sandbox Code Playgroud)
Vis*_*cro 18
FormatHelper下面显示的共享类提供了一个简单的解决方案,它使用了两种称为重载方法的变体StringToBoolean.
FormatHelper.StringToBoolean(String value)
FormatHelper.StringToBoolean(String value, Boolean NullOrEmptyDefault)
Run Code Online (Sandbox Code Playgroud)
两种变体都提供了大小写字符串匹配
1)从字符串到布尔默认转换为空或空字符串的正常转换 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");
Run Code Online (Sandbox Code Playgroud)
所有其他字符串值将产生如下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");
Run Code Online (Sandbox Code Playgroud)
注意:编辑BooleanStringOff下面类中的值以包含更多(或更少)false/off值
2)遵循与上述1)相同的规则,但允许提供默认值true作为转换的第二个参数.
当String值为空或时,使用默认值null.如果缺少字符串值需要表示true状态,这将非常有用.
以下代码示例将返回 true
Boolean myBool = FormatHelper.StringToBoolean("",true);
Run Code Online (Sandbox Code Playgroud)
以下代码示例将返回 false
Boolean myBool = FormatHelper.StringToBoolean("false",true);
Run Code Online (Sandbox Code Playgroud)
这是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;
}
}
Run Code Online (Sandbox Code Playgroud)
不幸的是,这在.NET中发生了很多.例如,我不记得它是XML Serializer还是XmlConvert,但如果True/False的大小不正确,其中一个会失败.
你可以通过整数往返来获得你想要的.
string s = "2";
int i = Convert.ToInt32(s);
bool b = Convert.ToBoolean(i);
Run Code Online (Sandbox Code Playgroud)
在上述情况下,任何非零值都将评估为真.
出于这个原因,我创建了一个名为ConversionStrategy的类,它考虑了源类型和目标类型,并选择了最理想(和灵活)的转换策略来进行转换.
你想Convert.ToBoolean(int value)不确定 Parse 方法是怎么回事:-)
无用的代码:
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");
}
Run Code Online (Sandbox Code Playgroud)
小智 5
这个怎么样?
byte i = 1; //or 0
bool myBool = BitConverter.ToBoolean(new byte[] { i }, 0)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
43457 次 |
| 最近记录: |