如何将“ 0”和“ 1”转换为假和真


90

我有一个通过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()',这似乎是显而易见的答案,但是我遇到了'String被识别为无效布尔值的问题。'抛出异常。我是否在这里遗漏了某些东西,还是有另一种方式使“ 1”和“ 0”表现为真与假?

谢谢!

Answers:


155

怎么样:

return (returnValue == "1");

或如下建议:

return (returnValue != "0");

正确的选择取决于成功的结果。


9
正确?检查;简洁?检查;优雅?检查一下 +1。
Earlz 2010年

11
我建议使用return (returnValue!="0")。这将是更自然的,0false和每一个数字,是不为零的true。当然,在此情况下,克里斯使用字符串而不是数字,因此此注释仅部分有效;)
Gacek 2010年

一直是辩论。0也表示ERROR_SUCCESS,表示一切正常。但是我同意Gacek的观点,这更自然。
Pierre-Alain Vigeant 2010年

3
不要忘记检查null:!string.IsNullOrEmpty(returnValue)&&(returnValue ==“ 1”)
csharpforevermore2013年

2
为什么不Convert.ToBoolean(1)?它的作用相同,并且您正在使用框架进行检查。我也喜欢上面的答案,但是哪个更适合使用?
user20358

105

在一行代码中:

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

3
我喜欢您的版本Chris,因为正如问题所述,让我们使用布尔值而不是比较字符串。
斯韦特2013年

我也更喜欢您的版本,因为它可以更清楚地传达意图。
BornToCode

仅适用于“ 1”或“ 0”。对于任何其他字符串,返回值都不是确定性的,例如“ 101”为真,以此类推...
szubajak

12

如果您希望转换始终成功,则转换字符串的最佳方法可能是将"1"astrue和其他任何因素都视为false(与Kevin一样)。如果您希望在返回"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.");
}

抓住无法识别的价值的好主意。不确定我要那样走,但还是个好主意。
克里斯,2010年

5

将返回类型设置为数字-您不需要字符(因此请不要使用它);可以使用Convert.ToBoolean(num)转换数值(0/1)

否则:请使用Kevin的答案


我希望我们可以更改返回类型。但是我们坚持到底是什么。
克里斯,2010年

10
Convert.ToBoolean仅接受True / true / False / false字符串
Yaro 2013年

4

您可以使用以下形式:

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

或更简单地说(感谢Jurijs Kastanovs):

return returnValue.Equals("1");

7
只需丢失“?true:false”位即可。完全没有必要。将其保留在{return returnValue.Equals(“ 1”)}
Jurijs Kastanovs '16

2

或者,如果未返回布尔值,则可以执行以下操作:

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

1

我的解决方案(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


-1

如果您不想转换,请使用;

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

也许您将根据需要返回值。

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.