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!

Chris
sumber

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.

kemiller2002
sumber
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))
Chris
sumber
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.");
}
Zach Johnson
sumber
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

riffnl
sumber
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");
Nuno Ribeiro
sumber
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");
Pabinator
sumber
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
pengguna2241289
sumber
-1
(returnValue != "1" ? false : true);
Amin AmiriDarban
sumber
-1

Jika Anda tidak ingin mengonversi. Gunakan saja;

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

Mungkin Anda akan mengembalikan nilai seperti yang Anda inginkan.

mzonerz.dll
sumber