it-roy-ru.com

Как преобразовать "0" и "1" в false и true

У меня есть метод, который подключается к базе данных через 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' вести себя как истина и ложь?

Спасибо!

75
Chris

Как насчет:

return (returnValue == "1");

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

return (returnValue != "0");

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

134
kemiller2002

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

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
86
Chris

Если вы хотите, чтобы преобразование всегда выполнялось успешно, вероятно, лучший способ преобразовать строку состоит в том, чтобы рассматривать "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.");
}
12
Zach Johnson

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

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

5
riffnl

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

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

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

return returnValue.Equals("1");
2
Nuno Ribeiro

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

bool boolValue = (returnValue == "1");
1
Pabinator

Мое решение (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
user2241289