Bagaimana mengubah "0" dan "1" menjadi false dan true


90

Saya memiliki metode yang menghubungkan ke database melalui Odbc. Prosedur tersimpan yang saya panggil memiliki nilai kembali yang dari sisi database adalah 'Char'. Saat ini saya mengambil nilai pengembalian itu sebagai string dan menggunakannya dalam pernyataan if sederhana. Saya benar-benar tidak suka gagasan membandingkan string seperti ini ketika hanya dua nilai yang dapat kembali dari database, 0 dan 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;
} 

Bagaimana cara yang tepat untuk menangani situasi ini. Saya sudah mencoba 'Convert.ToBoolean ()' yang sepertinya jawaban yang jelas tetapi saya menemukan 'String tidak dikenali sebagai Boolean yang valid. 'pengecualian dilempar. Apakah saya melewatkan sesuatu di sini, atau adakah cara lain untuk membuat '1' dan '0' menjadi benar dan salah?

Terima kasih!

Jawaban:


156

Bagaimana tentang:

return (returnValue == "1");

atau seperti yang disarankan di bawah ini:

return (returnValue != "0");

Yang benar akan tergantung pada apa yang Anda cari sebagai hasil sukses.


9
Benar? Memeriksa; Ringkas? Memeriksa; Anggun? Memeriksa. +1.
Earlz

11
Saya akan merekomendasikan penggunaan return (returnValue!="0"). Akan lebih alami bahwa 0ada falsedan setiap angka yang bukan nol adalah true. Tentu saja di sini kita memiliki kasus di mana Chris menggunakan string alih-alih angka, jadi komentar ini hanya valid sebagian;)
Gacek

Itu selalu menjadi perdebatan. 0 juga berarti ERROR_SUCCESS yang artinya semuanya berjalan lancar. Tapi saya setuju dengan Gacek yang lebih natural.
Pierre-Alain Vigeant

3
Jangan lupa untuk memeriksa nulls:! String.IsNullOrEmpty (returnValue) && (returnValue == "1")
csharpforeverlebih lanjut

2
mengapa tidak Convert.ToBoolean (1)? Itu melakukan hal yang sama dan Anda menggunakan kerangka kerja untuk pemeriksaan. Saya suka jawaban di atas juga, tapi mana yang lebih baik untuk digunakan?
pengguna20358

105

Dalam satu baris kode:

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

3
Saya suka versi Anda Chris karena seperti pertanyaan yang dinyatakan, mari gunakan boolean daripada membandingkan string.
Svet

Saya juga lebih suka versi Anda karena maksudnya lebih jelas disampaikan.
BornToCode

Ini tepat hanya untuk "1" atau "0". Untuk string lain nilai kembaliannya tidak deterministik, misalnya "101" adalah true dan seterusnya ...
szubajak

12

Jika Anda ingin konversi selalu berhasil, mungkin cara terbaik untuk mengubah string adalah dengan mempertimbangkan "1"as truedan apa pun false(seperti yang dilakukan Kevin). Jika Anda ingin konversi gagal jika ada selain "1"atau "0"dikembalikan, maka berikut ini akan cukup (Anda bisa meletakkannya di metode 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.");
}

Ide bagus untuk menangkap nilai yang tidak dikenali. Tidak yakin saya ingin pergi ke sana, tapi tetap merupakan ide yang bagus.
Chris

5

Setel tipe pengembalian ke numerik - Anda tidak memerlukan karakter (jadi jangan gunakan); nilai numerik (0/1) dapat dikonversi dengan Convert.ToBoolean (num)

Jika tidak: gunakan jawaban Kevin


Saya berharap kami dapat mengubah tipe pengembalian. Tapi kami terjebak dengan apa adanya.
Chris

10
Convert.ToBooleanhanya menerima string Benar / benar / Salah / salah
Yaro

5

Anda dapat menggunakan formulir itu:

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

Atau lebih sederhana (terima kasih kepada Jurijs Kastanovs):

return returnValue.Equals("1");

7
Hilang saja bit "? True: false". Ini sama sekali tidak perlu. Biarkan di {returnValue.Equals ("1")}
Jurijs Kastanovs

2

Atau jika nilai Boolean tidak dikembalikan, Anda dapat melakukan sesuatu seperti ini:

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

1

Solusi saya (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


-1

Jika Anda tidak ingin mengonversi. Gunakan saja;

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

Mungkin Anda akan mengembalikan nilai seperti yang Anda inginkan.

Dengan menggunakan situs kami, Anda mengakui telah membaca dan memahami Kebijakan Cookie dan Kebijakan Privasi kami.
Licensed under cc by-sa 3.0 with attribution required.