为什么
Convert.ToBoolean("1")
抛出System.FormatException
?
我应该如何进行此转换?
答案 0 :(得分:24)
是的,这是as documented:
[throws] FormatException [if] value不等于TrueString或FalseString。
TrueString
为“True”,FalseString
为“False”。
如果要检测字符串是否为“1”,请使用以下代码:
bool foo = text == "1";
答案 1 :(得分:5)
取决于你想要什么。也许
var result = Convert.ToInt32(yourstirng) != 0
假设任何数字,但0为真。否则,简单的比较就可以了。
var result = yourstirng == "1"
答案 2 :(得分:3)
参数必须等于Boolean.TrueString
或Boolean.FalseString
。这些字符串的值分别为“True”和“False”。请参阅MSDN。
字符串值“1”显然不等于“True”或“False”。
答案 3 :(得分:3)
问题是,你在这里给出一个字符串,而不是一个数字。它不能将字符串“1”转换为true,而是转换为int。
Convert.ToBoolean(1);
应该有用。
答案 4 :(得分:1)
转换为布尔值时,最好使用您自己的例程,处理所有情况。 .net Convert.ToBoolean不是一个实用的例程,它是你必须解释为什么它不起作用的功能之一。
答案 5 :(得分:0)
我知道这是旧的,但万一有人搜索......只需这样做:
Convert.ToBoolean(Convert.ToInt16(“1”))工作正常。不漂亮,但需要。
答案 6 :(得分:0)
另一种解决方案是对字符串对象使用扩展方法。我使用这种技术的情况下,我必须解析具有不同字符串的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值