Как преобразовать «0» и «1» в false и true - PullRequest
77 голосов
/ 15 апреля 2010

У меня есть метод, который подключается к базе данных через Odbc. Хранимая процедура, которую я Вызов имеет возвращаемое значение, которое со стороны базы данных является «Char». Щас хватаюсь это возвращаемое значение в виде строки и использование его в простом операторе if. Мне действительно не нравится идея сравнения строки, подобной этой, когда только два значения могут вернуться из базы данных, 0 и 1.

OdbcCommand fetchCommand = new OdbcCommand(storedProc, conn);

fetchCommand.CommandType = CommandType.StoredProcedure;
fetchCommand.Parameters.AddWithValue("@column ", myCustomParameter);
fetchCommand.Parameters.Add("@myReturnValue", OdbcType.Char, 1)
            .Direction = ParameterDirection.Output;
fetchCommand.ExecuteNonQuery();

string returnValue = fetchCommand.Parameters["@myReturnValue"].Value.ToString();
if (returnValue == "1")
{
    return true;
} 

Что было бы правильным способом справиться с этой ситуацией. Я пытался "Convert.ToBoolean ()", который казался как очевидный ответ, но я столкнулся с «Строка не была признана действительным логическим значением. исключение бросается. Я что-то пропустил здесь, или есть другой способ заставить '1' и '0' вести себя как истина и ложь?

Спасибо!

Ответы [ 9 ]

137 голосов
/ 15 апреля 2010

Как насчет:

return (returnValue == "1");

или как предложено ниже:

return (returnValue != "0");

Правильный выбор будет зависеть от того, что вы ищете в результате успеха.

94 голосов
/ 05 сентября 2012

В одной строке кода:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
12 голосов
/ 15 апреля 2010

Если вы хотите, чтобы преобразование всегда выполнялось успешно, вероятно, лучший способ преобразовать строку - рассмотреть "1" как true и все остальное как false (как делает Кевин). Если вы хотите, чтобы преобразование завершилось неудачно, если будет получено что-либо, кроме "1" или "0", тогда будет достаточно следующего (вы можете поместить его в вспомогательный метод):

if (returnValue == "1")
{
    return true;
}
else if (returnValue == "0")
{
    return false;
}
else
{
    throw new FormatException("The string is not a recognized as a valid boolean value.");
}
5 голосов
/ 15 апреля 2010

Установите тип возвращаемого значения числовой - вам не нужен символ (поэтому не используйте его); числовое значение (0/1) можно преобразовать с помощью Convert.ToBoolean (num)

В противном случае: используйте ответ Кевина

3 голосов
/ 19 февраля 2016

Вы можете использовать эту форму:

return returnValue.Equals("1") ? true : false;

Или проще (спасибо Юрию Кастанову):

return returnValue.Equals("1");
1 голос
/ 19 ноября 2014

Или, если логическое значение не возвращено, вы можете сделать что-то вроде этого:

bool boolValue = (returnValue == "1");
0 голосов
/ 07 января 2019

Мое решение (vb.net):

Private Function ConvertToBoolean(p1 As Object) As Boolean
    If p1 Is Nothing Then Return False
    If IsDBNull(p1) Then Return False
    If p1.ToString = "1" Then Return True
    If p1.ToString.ToLower = "true" Then Return True
    Return False
End Function
0 голосов
/ 26 декабря 2016

Если вы не хотите конвертировать. Просто используйте;

 bool _status = status == "1" ? true : false;

Возможно, вы вернете значения так, как хотите.

0 голосов
/ 25 апреля 2015
(returnValue != "1" ? false : true);
...