如何将"0"和"1"转换为false和true

Chr*_*ris 82 .net c# asp.net odbc boolean-logic

我有一个通过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;
} 
Run Code Online (Sandbox Code Playgroud)

处理这种情况的正确方法是什么?我试过'Convert.ToBoolean()',这似乎是一个明显的答案,但我遇到了'字符串未被识别为有效的布尔值.'抛出异常.我在这里遗漏了什么,还是有另一种方法让'1'和'0'表现得像真假一样?

谢谢!

kem*_*002 143

怎么样:

return (returnValue == "1");
Run Code Online (Sandbox Code Playgroud)

或者如下所示:

return (returnValue != "0");
Run Code Online (Sandbox Code Playgroud)

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

  • 我建议使用`return(returnValue!="0")`."0"是"假"是更自然的,每个不为零的数字都是"真".当然在这里我们有Chris使用字符串而不是数字的情况,所以这个评论只是部分有效;) (9认同)
  • 正确?校验; 简洁?校验; 优雅?校验.+1. (8认同)
  • 不要忘记检查空值:!string.IsNullOrEmpty(returnValue)&&(returnValue =="1") (3认同)
  • 为什么不转换.ToBoolean(1)?它也是如此,您正在使用框架进行检查.我也喜欢上面的答案,但哪一个更好用? (2认同)

小智 97

在一行代码中:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
Run Code Online (Sandbox Code Playgroud)

  • 我喜欢你的版本Chris,因为问题陈述,让我们使用布尔而不是比较字符串. (3认同)

Zac*_*son 12

如果您希望转换始终成功,那么转换字符串的最佳方式可能是考虑"1"as true和其他任何方式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.");
}
Run Code Online (Sandbox Code Playgroud)


Nun*_*iro 6

您可以使用该表格:

return returnValue.Equals("1") ? true : false;
Run Code Online (Sandbox Code Playgroud)

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

return returnValue.Equals("1");
Run Code Online (Sandbox Code Playgroud)

  • 只是失去了“?真:假”位。这是完全没有必要的。把它留在 { return returnValue.Equals("1") } (7认同)

小智 5

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

否则:使用凯文的回答

  • `Convert.ToBoolean`只接受True/true/False/false字符串 (7认同)