如何将“0”和“1”转换为false和true

问题描述 投票:77回答:9

我有一个通过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'表现得像真假一样?

谢谢!

c# .net asp.net odbc boolean-logic
9个回答
135
投票

怎么样:

return (returnValue == "1");

或者如下所示:

return (returnValue != "0");

正确的将取决于您所寻找的成功结果。


88
投票

在一行代码中:

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

12
投票

如果你希望转换总能成功,那么转换字符串的最佳方法可能是将"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
投票

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

否则:使用凯文的回答


3
投票

您可以使用该表单:

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

或者更简单(感谢Jurijs Kastanovs):

return returnValue.Equals("1");

1
投票

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

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

0
投票

我的解决方案(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
投票
(returnValue != "1" ? false : true);

-1
投票

如果你不想转换。只是使用;

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

也许你会根据需要返回值。

© www.soinside.com 2019 - 2024. All rights reserved.