Почему
Convert.ToBoolean("1")
выбросить System.FormatException
?
Как я могу продолжить это преобразование?
Почему
Convert.ToBoolean("1")
выбросить System.FormatException
?
Как я могу продолжить это преобразование?
Да, это как задокументировано:
[throws] Значение FormatException [if] не равно 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.
Convert.ToBoolean(1);
должен работать.
При преобразовании в Boolean лучше использовать свою собственную программу, где вы обрабатываете все случаи..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");
Если вы хотите, параметр truevalue может быть строковым массивом, если вам нужно сравнить несколько значений (например, n/a, na, none), и вы можете добавить ложные значения, если хотите дополнительно ограничить его или использовать типы с нулевым значением.