Convert.ToBoolean(“1”)在C#中抛出System.Format异常

时间:2010-04-09 09:50:14

标签: c#

为什么

Convert.ToBoolean("1") 

抛出System.FormatException

我应该如何进行此转换?

7 个答案:

答案 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.TrueStringBoolean.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值