Convert.ToBoolean( "1" ) генерирует исключение System.Format в С#

Почему

Convert.ToBoolean("1") 

выбросить System.FormatException?

Как я могу продолжить это преобразование?

Ответ 1

Да, это как задокументировано:

[throws] Значение FormatException [if] не равно TrueString или FalseString.

TrueString - "True", а FalseString - "False".

Если вы хотите определить, является ли строка "1" или нет, используйте этот код:

bool foo = text == "1";

Ответ 2

Зависит от того, что вы хотите. Возможно,

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

при условии, что любое число, но 0, истинно. В противном случае будет выполнено простое сравнение.

var result = yourstirng == "1"

Ответ 3

Параметр должен быть равен либо Boolean.TrueString, либо Boolean.FalseString. Значения этих строк равны соответственно "True" и "False". См. MSDN.

Строковое значение "1", очевидно, не равно "True" или "False".

Ответ 4

Проблема заключается в том, что вы предоставляете строку здесь, а не цифру. Он не может преобразовать строку "1" в true, но int 1.

Convert.ToBoolean(1);

должен работать.

Ответ 5

При преобразовании в Boolean лучше использовать свою собственную программу, где вы обрабатываете все случаи..net Convert.ToBoolean - это не практическая процедура, это одна из тех функций, в которых вам нужно объяснить, почему она не работает.

Ответ 6

Я знаю, что это старо, но в случае, если кто-то ищет... просто выполните это:

Convert.ToBoolean(Convert.ToInt16 ( "1" )) работает нормально. Не красиво, но нужно быть.

Ответ 7

Другое решение - использовать метод расширения для строкового объекта. Я использовал этот метод в случае, когда мне приходилось разбирать 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");

Если вы хотите, параметр truevalue может быть строковым массивом, если вам нужно сравнить несколько значений (например, n/a, na, none), и вы можете добавить ложные значения, если хотите дополнительно ограничить его или использовать типы с нулевым значением.