93 votes

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

J'ai une méthode qui est de la connexion à une base de données via Odbc. La procédure stockée qui je suis appel a une valeur de retour qui, à partir de la base de données côté est un 'Char'. Maintenant je suis en saisissant que la valeur de retour comme une chaîne et l'utiliser en simple si l'instruction. Je n'aime vraiment pas l'idée de la comparaison d'une chaîne comme celle-ci, lorsque seules deux valeurs peuvent venir 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é " de le Convertir.ToBoolean () " qui semblait comme la réponse la plus évidente, mais j'ai couru dans la "Chaîne n'était pas reconnu comme valide Booléenne.' exception levée. Ai-je raté quelque chose ici, ou est-il une autre façon de faire de '1' et '0' agir comme le vrai et le faux?

Merci!

164voto

Kevin Points 57797

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.

114voto

Chris Points 327

Dans une seule ligne de code:

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

12voto

Zach Johnson Points 12062

Si vous voulez que la conversion réussisse toujours, le meilleur moyen de convertir la chaîne serait probablement de considérer "1" tant que true et toute autre chose en tant que false (comme Kevin Est-ce que). Si vous voulez que la conversion échoue si vous obtenez une valeur autre que "1" ou "0" , les éléments suivants suffisent (vous pouvez la 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.");
}
 

5voto

riffnl Points 1820

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X