Cara bekerja dengan jenis nullable di C #

Bahasa C # memberikan sokongan untuk dua jenis data: jenis nilai dan jenis rujukan. Walaupun pemboleh ubah jenis System.Stringadalah jenis rujukan, pemboleh ubah jenis Int32adalah jenis nilai.

Menetapkan nilai nol ke jenis nilai adalah satu cabaran untuk masa yang lama sehingga konsep jenis nullable diperkenalkan. Anda tidak boleh memberikan nilai nol secara langsung ke jenis nilai. Anda tidak boleh memberikan nilai nol secara langsung ke jenis nilai. Anda boleh menetapkan nilai nol untuk jenis nilai hanya dengan memanfaatkan jenis yang tidak dapat ditolak - satu ciri yang ditambahkan ke versi .Net Framework yang lebih baru.

Jenis nullable telah diperkenalkan dalam bahasa pengaturcaraan C #. Ini adalah contoh struktur yang dinamakan System.Nullable. Dalam menggunakan jenis nullable, selain dari nilai dalam julat yang dibenarkan untuk jenis nilai, anda juga dapat memiliki nilai null. Oleh itu, jika anda mempunyai pemboleh ubah Boolean yang nullable, kemungkinan nilai yang dapat anda tetapkan kepada pemboleh ubah Boolean termasuk benar, salah, atau nol. Ciri ini sangat berguna terutamanya ketika anda bekerja dengan data yang terdapat di dalam pangkalan data dan anda ingin memberikan nilai kepada jenis nilai yang mungkin atau tidak kosong.

Perhatikan bahawa anda hanya boleh mempunyai jenis nilai sebagai nullable - anda tidak boleh mempunyai jenis rujukan yang nullable. Jenis rujukan tidak boleh menjadi jenis nullable kerana ia mempunyai sokongan untuk null - iaitu, anda boleh menetapkan nilai null ke jenis rujukan apa pun. Jenis nilai berasal System.ValueTypedan mengandungi data di dalam peruntukan memori sendiri. Dengan kata lain, pemboleh ubah atau objek atau jenis nilai mempunyai salinan data mereka sendiri.

Sebaliknya, jenis rujukan meluas System.Objectdan menunjuk ke lokasi dalam memori yang mengandungi data sebenar. Harus diingat bahawa mana-mana pengendali yang tidak biasa dan binari yang dapat digunakan pada jenis nilai juga dapat digunakan untuk rakan sebayanya yang tidak dapat ditolak. Coretan kod berikut menggambarkan sintaks untuk menentukan jenis nullable dalam C #.

System.Nullable variable = null;

or

T? variable = null;

Di sini, Tmewakili jenis data pemboleh ubah. Pernyataan berikut tidak akan disusun kerana anda tidak dapat memberikan nilai nol pada jenis nilai.

Int32 i = null;

Untuk menetapkan nilai nol ke jenis nilai, anda perlu memanfaatkan jenis nullable seperti yang ditunjukkan dalam coretan kod di bawah.

Int32? i = null;

Yang HasValuedan Valuesifat-sifat

Terdapat dua sifat baca-sahaja awam, HasValuedan Value, dalam contoh jenis yang tidak dapat dibatalkan. Sementara yang pertama digunakan untuk memeriksa apakah pemboleh ubah nullable berisi nilai, yang terakhir digunakan untuk mengambil nilai yang terdapat di dalam pemboleh ubah yang dapat ditolak. Perhatikan bahawa HasValuemempunyai nilai lalai false. Senarai kod berikut menggambarkan bagaimana sifat HasValuedan Valuesifat dapat digunakan.

 static void Main(string[] args)

        {

            Int32? i = 100;

            if (i.HasValue)

            {

                Console.WriteLine("The value of the variable i is: "+i.Value);

            }

            else

            {

                Console.WriteLine("The value of the variable i is undefined.");

            }

            Console.ReadLine();

        }

Perhatikan bahawa anda juga dapat memeriksa apakah nilai pemboleh ubah yang tidak dapat ditolerir adalah nol seperti yang ditunjukkan dalam potongan kod di bawah.

Int32? i = 100;

if(i != null)

Console.Writeline("The value of the variable i is not null");

Penukaran yang tersirat dan tersurat

Anda boleh menghantar jenis yang tidak dapat ditolak ke jenis yang tidak boleh ditolak sama ada secara eksplisit atau dengan menggunakan Valueharta tanah. Coretan kod berikut menggambarkan ini.

Int32? i = null;

Int32 j = (Int32)i;

Perlu diingatkan bahawa jika anda menggunakan jenis nullable untuk jenis yang tidak dapat ditolak dan jenis yang nullable mengandungi nilai null, anda akan menghadapi InvalidOperationException.

Coretan kod berikut menggambarkan bagaimana anda dapat melakukan pemeran tersirat ketika bekerja dengan jenis yang tidak dapat ditolak.

Int32? i = null;

i = 100;

Pengendali penggabungan kosong ( ??)

Pengendali penggabungan nol (ditunjukkan sebagai ??) digunakan untuk menentukan nilai lalai yang akan dikembalikan apabila anda menetapkan jenis nullable untuk jenis yang tidak dapat ditolak. Berikut adalah contoh kod yang menggambarkan perkara ini.

Int32? i = null;

Int32 j = i ?? 100;

Console.WriteLine("The value of the variable j is: " + j);

Nilai pemboleh ubah idiberikan jjika i tidak nol. Sekiranya nilai pemboleh ubah iadalah nol, nilai integer 100 diberikan kepada pemboleh ubah j. Ini adalah cara pengendali penggabungan gabungan berfungsi.