wake-up-neo.net

Wie konvertiert man "0" und "1" in "false" und "true"?

Ich habe eine Methode, die eine Verbindung zu einer Datenbank über Odbc herstellt. Die gespeicherte Prozedur, die ich aufgerufen habe, hat einen Rückgabewert, der von der Datenbankseite aus ein 'Char' ist. Im Moment greife ich .__ diesen Rückgabewert als String und verwende ihn in einer einfachen if-Anweisung. Ich mag die Idee nicht wirklich, einen String wie diesen zu vergleichen, wenn nur zwei Werte aus der Datenbank zurückgegeben werden können, 0 und 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;
} 

Was wäre der richtige Weg, um mit dieser Situation umzugehen. Ich habe 'Convert.ToBoolean ()' ausprobiert, was mir wie die naheliegende Antwort vorkam, aber ich traf den 'String wurde nicht als gültiger Boolean erkannt. Ausnahme wird geworfen. Fehlt mir etwas hier oder gibt es eine andere Möglichkeit, "1" und "0" wie wahr und falsch wirken zu lassen?

Vielen Dank!

75
Chris

Wie wäre es mit:

return (returnValue == "1");

oder wie unten vorgeschlagen:

return (returnValue != "0");

Der richtige Wert hängt davon ab, was Sie als Erfolgsergebnis suchen. 

134
kemiller2002

In einer einzigen Codezeile:

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

Wenn die Konvertierung immer erfolgreich sein soll, besteht der beste Weg zur Konvertierung der Zeichenfolge darin, "1" als true und alles andere als false zu betrachten (wie Kevin dies tut). Wenn Sie möchten, dass die Konvertierung fehlschlägt, wenn etwas anderes als "1" oder "0" zurückgegeben wird, würde Folgendes ausreichen (Sie könnten es in eine Hilfsmethode setzen): 

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

Setzen Sie den Rückgabetyp auf numerisch - Sie benötigen kein Zeichen (verwenden Sie es also nicht). Ein numerischer Wert (0/1) kann mit Convert.ToBoolean (num) konvertiert werden.

Ansonsten: benutze Kevins Antwort

5
riffnl

Sie können dieses Formular verwenden: 

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

Oder einfacher (danke Jurijs Kastanovs):

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

Wenn der boolesche Wert nicht zurückgegeben wurde, können Sie Folgendes tun:

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

Meine Lösung (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