web-dev-qa-db-fra.com

Comment convertir "0" et "1" en faux et vrai

J'ai une méthode qui se connecte à une base de données via Odbc. La procédure stockée que j'appelle A une valeur de retour qui, du côté de la base de données, est un 'Char'. En ce moment, je récupère Cette valeur de retour sous forme de chaîne et je l’utilise dans une simple instruction if. Je n’aime vraiment pas l’idée De comparer une chaîne comme celle-ci lorsque seulement deux valeurs peuvent revenir de la base de données, 0 et 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;
} 

Quelle serait la bonne façon de gérer cette situation. J'ai essayé 'Convert.ToBoolean ()' qui semblait être une réponse évidente, mais je suis tombé sur la chaîne qui n'était pas reconnue comme un booléen valide. 'exception étant jeté. Est-ce que je manque quelque choseici ou existe-t-il un autre moyen de faire en sorte que "1" et "0" agissent comme des vrais et des faux?

Merci!

75
Chris

Que diriez-vous:

return (returnValue == "1");

ou comme suggéré ci-dessous:

return (returnValue != "0");

Le bon dépendra de ce que vous recherchez comme résultat du succès. 

134
kemiller2002

Dans une seule ligne de code:

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

Si vous voulez que la conversion réussisse toujours, le meilleur moyen de convertir la chaîne serait probablement de considérer "1" en tant que true et toute autre chose en tant que false (comme le fait Kevin). Si vous vouliez que la conversion échoue si quelque chose d'autre que "1" ou "0" est renvoyé, les éléments suivants suffiraient (vous pouvez le mettre dans une méthode d'assistance): 

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

Définissez le type de retour sur numérique - vous n'avez pas besoin d'un caractère (donc ne l'utilisez pas); une valeur numérique (0/1) peut être convertie avec Convert.ToBoolean (num)

Sinon: utilisez la réponse de Kevin

5
riffnl

Vous pouvez utiliser ce formulaire: 

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

Ou plus simplement (grâce à Jurijs Kastanovs):

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

Ou si la valeur booléenne n'est pas renvoyée, vous pouvez faire quelque chose comme ceci:

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

Ma solution (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