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.TrueString
或Boolean.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值。