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


У меня есть метод, который подключается к базе данных через ODBC. Хранимая процедура, которой я являюсь вызов имеет возвращаемое значение, которое со стороны базы данных 'Чара'. Прямо сейчас я хватаю это возвращаемое значение в виде строки и использование его в простом операторе 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;
} 

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

спасибо!

8 74

8 ответов:

Как насчет:

return (returnValue == "1");

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

return (returnValue != "0");

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

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

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

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

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

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

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

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

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

return returnValue.Equals("1");

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

bool boolValue = (returnValue == "1");
(returnValue != "1" ? false : true);

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

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

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