Convert.ToBoolean(“1”)在C#中抛出System.Formatexception

为什么

Convert.ToBoolean("1") 

抛出一个System.FormatException

我应该如何进行此转换?

是的,这是记录在案的 :

[throws] FormatException [if] value不等于TrueString或FalseString。

TrueString为“True”, FalseString为“False”。

如果要检测字符串是否为“1”,请使用以下代码:

 bool foo = text == "1"; 

取决于你想要什么。 也许

 var result = Convert.ToInt32(yourstirng) != 0 

假设任何数字,但0为真。 否则,简单的比较就行了。

 var result = yourstirng == "1" 

该参数必须等于Boolean.TrueStringBoolean.FalseString 。 这些字符串的值分别为“True”和“False”。 请参阅MSDN 。

字符串值“1”显然不等于“True”或“False”。

问题是,你在这里给出一个字符串,而不是一个数字。 它不能将字符串“1”转换为true,而是将int 1转换为true。

Convert.ToBoolean(1);

应该管用。

转换为布尔值时,最好使用自己的例程来处理所有情况。 .net Convert.ToBoolean不是一个实际的例程,它是那些你必须解释它为什么不起作用的函数之一。

我知道这是旧的,但万一有人搜索…只需这样做:

Convert.ToBoolean(Convert.ToInt16(“1”))工作正常。 不漂亮,但需要。

另一种解决方案是对字符串对象使用扩展方法。 我使用这种技术的情况下,我必须解析具有不同字符串的CSV文件,这些字符串必须根据其来源和格式转换为布尔值。

 public static class StringExtensions { public static bool ToBool(this string value,string trueValue) { if (value == trueValue) { return true; } else { return false; } } } 

这将被称为……

 MyProperty = CsvColumn[6].ToBool("1"); 

如果需要,如果需要比较多个值(如n / a,na,none),truevalue参数可以是字符串数组,如果要进一步限制它或使用可空类型,则可以添加false值。