Cómo convertir" 0 "y" 1 " a falso y verdadero


Tengo un método que se está conectando a una base de datos a través de Odbc. El procedimiento almacenado que estoy la llamada tiene un valor devuelto que desde el lado de la base de datos es un 'Char'. Ahora mismo estoy agarrando ese valor devuelve como una cadena y lo usa en una instrucción if simple. Realmente no me gusta la idea de comparar una cadena como esta cuando solo dos valores pueden volver de la base de datos, 0 y 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;
} 

Cuál sería la manera adecuada de manejar esta situación. He intentado Convertir.ToBoolean ()', que parecer como la respuesta obvia, pero me encontré con la ' Cadena no fue reconocido como un booleano válido. 'excepción. Me estoy perdiendo algo aquí, o hay otra manera de hacer que' 1 'y' 0 ' actúen como verdadero y falso?

Gracias!

Author: Chris, 2010-04-15

8 answers

Qué tal:

return (returnValue == "1");

O como se sugiere a continuación:

return (returnValue != "0");

El correcto dependerá de lo que esté buscando como un resultado exitoso.

 129
Author: kemiller2002,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-15 19:05:29

En una sola línea de código:

bool bVal = Convert.ToBoolean(Convert.ToInt16(returnValue))
 83
Author: Chris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2012-10-02 05:14:54

Si desea que la conversión siempre tenga éxito, probablemente la mejor manera de convertir la cadena sería considerar "1" como true y cualquier otra cosa como false (como lo hace Kevin). Si desea que la conversión falle si se devuelve algo que no sea "1" o "0", entonces lo siguiente sería suficiente (podría ponerlo en un método helper):

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
Author: Zach Johnson,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-15 18:55:40

Establezca el tipo de retorno en numérico - no necesita un carácter (así que no lo use); un valor numérico (0/1) se puede convertir con Convert.ToBoolean (num)

De lo contrario: use la respuesta de Kevin

 5
Author: riffnl,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2010-04-15 18:49:52

Puedes usar ese formulario:

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

O más simplemente (gracias a Jurijs Kastanovs):

return returnValue.Equals("1");
 2
Author: Nuno Ribeiro,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2017-05-23 09:04:58

O si no se devuelve el valor booleano, puede hacer algo como esto:

bool boolValue = (returnValue == "1");
 1
Author: Pabinator,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2014-11-18 23:18:51
(returnValue != "1" ? false : true);
 -1
Author: AminAmiriDarban,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2015-06-23 13:56:37

Si no desea convertir.Solo use;

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

Tal vez devuelva los valores como desee.

 -1
Author: mzonerz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2016-12-26 10:20:49