Saya mulai mempelajari jenis yang dapat dibatalkan dan menjalankan perilaku berikut.
Saat mencoba nullable int, saya melihat operator perbandingan memberi saya hasil yang tidak terduga. Misalnya, Dalam kode saya di bawah ini, Output yang saya dapatkan adalah "keduanya dan 1 sama" . Catatan, itu tidak mencetak "null" juga.
int? a = null;
int? b = 1;
if (a < b)
Console.WriteLine("{0} is bigger than {1}", b, a);
else if (a > b)
Console.WriteLine("{0} is bigger than {1}", a, b);
else
Console.WriteLine("both {0} and {1} are equal", a, b);
Saya berharap bilangan bulat non-negatif akan lebih besar dari nol, Apakah saya kehilangan sesuatu di sini?
Jawaban:
Menurut MSDN - itu di halaman di bagian "Operator":
Jadi keduanya
a > b
dana < b
mengevaluasifalse
karenaa
itu nol ...sumber
nothing <> 1
=null
di VB sedangkannull != 1
=true
di C # - Saya telah menggunakan LinqPad untuk menguji pernyataanLifted Operators
di C # stackoverflow.com/questions/3370110/what-are-lifted-operators - Saya bertanya-tanya apakah ini mungkin alasan VB.NET mengembalikan hasil yang berbedaSeperti kata MSDN
sumber
Untuk meringkas: setiap perbandingan ketidaksetaraan dengan nol (
>=
,<
,<=
,>
) mengembalikanfalse
bahkan jika kedua operan null. yaituSetiap perbandingan kesetaraan atau non-kesetaraan dengan null (
==
,!=
) berfungsi 'seperti yang diharapkan'. yaitusumber
int? nonNull
danint notNull
?Nullable<NumberTypes> = null
. Diverifikasi.Membandingkan C # dengan SQL
C #: a = null dan b = null => a == b => true
SQL: a = null dan b = null => a == b => false
sumber