Bagaimana bekerja dengan tipe nullable di C #

Bahasa C # menyediakan dukungan untuk dua tipe data: tipe nilai dan tipe referensi. Sementara variabel tipe System.Stringadalah tipe referensi, variabel tipe Int32adalah tipe nilai.

Menetapkan nilai null ke jenis nilai merupakan tantangan untuk waktu yang lama sampai konsep jenis nullable diperkenalkan. Anda tidak dapat menetapkan nilai null secara langsung ke jenis nilai. Anda tidak dapat menetapkan nilai null secara langsung ke jenis nilai. Anda dapat menetapkan nilai null ke jenis nilai hanya dengan memanfaatkan jenis nullable - fitur yang ditambahkan ke versi .Net Framework yang lebih baru.

Jenis nullable telah diperkenalkan dalam bahasa pemrograman C #. Ini adalah contoh dari struct bernama System.Nullable. Dalam menggunakan tipe nullable, selain nilai dalam rentang yang diizinkan untuk tipe nilai, Anda juga dapat memiliki nilai null. Oleh karena itu, jika Anda memiliki variabel Boolean nullable, kemungkinan nilai yang dapat Anda tetapkan ke variabel Boolean termasuk true, false, atau null. Fitur ini sangat berguna terutama ketika Anda bekerja dengan data yang berada di database dan Anda ingin menetapkan nilai ke tipe nilai yang mungkin atau mungkin bukan nol.

Perhatikan bahwa Anda hanya dapat memiliki tipe nilai sebagai nullable - Anda tidak dapat memiliki tipe referensi yang nullable. Jenis referensi tidak boleh berupa jenis yang dapat null karena memiliki dukungan untuk null - yaitu, Anda dapat menetapkan nilai null ke jenis referensi apa pun. Jenis nilai berasal dari System.ValueTypedan berisi data di dalam alokasi memorinya sendiri. Dengan kata lain, variabel atau objek atau tipe nilai memiliki salinan datanya sendiri.

Sebaliknya, tipe referensi meluas System.Objectdan menunjuk ke lokasi di memori yang berisi data aktual. Perlu dicatat bahwa setiap operator unary dan binary yang dapat digunakan pada tipe nilai juga dapat diterapkan ke mitra nullable-nya. Cuplikan kode berikut mengilustrasikan sintaks untuk mendefinisikan tipe nullable di C #.

System.Nullable variable = null;

or

T? variable = null;

Di sini, Tmewakili tipe data dari variabel. Pernyataan berikut tidak akan dikompilasi karena Anda tidak dapat menetapkan nilai null ke tipe nilai.

Int32 i = null;

Untuk menetapkan nilai null ke jenis nilai, Anda perlu memanfaatkan jenis nullable seperti yang ditunjukkan pada cuplikan kode di bawah ini.

Int32? i = null;

The HasValuedan Valuesifat

Ada dua properti publik read-only, HasValuedan Value, dalam sebuah instance dari tipe nullable. Sementara yang pertama digunakan untuk memeriksa apakah variabel nullable berisi nilai, yang terakhir digunakan untuk mengambil nilai yang terkandung di dalam variabel nullable. Perhatikan bahwa HasValuememiliki nilai default false. Daftar kode berikut menggambarkan bagaimana properti HasValuedan Valuedapat 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 bahwa Anda juga dapat memeriksa apakah nilai variabel nullable null seperti yang ditunjukkan pada cuplikan kode di bawah.

Int32? i = 100;

if(i != null)

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

Konversi implisit dan eksplisit

Anda bisa mentransmisikan tipe nullable ke tipe non-nullable baik secara eksplisit atau dengan menggunakan Valueproperti. Cuplikan kode berikut menggambarkan hal ini.

Int32? i = null;

Int32 j = (Int32)i;

Perlu dicatat bahwa jika Anda memasukkan tipe nullable ke tipe non-nullable dan tipe nullable berisi nilai null, Anda akan menemukan InvalidOperationException.

Cuplikan kode berikut mengilustrasikan bagaimana Anda dapat melakukan cast implisit saat bekerja dengan tipe nullable.

Int32? i = null;

i = 100;

Operator penggabungan null ( ??)

Operator penggabungan null (direpresentasikan sebagai ??) digunakan untuk menentukan nilai default yang akan dikembalikan saat Anda menetapkan tipe nullable ke tipe non-nullable. Berikut adalah contoh kode yang menggambarkan hal ini.

Int32? i = null;

Int32 j = i ?? 100;

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

Nilai variabel iditetapkan jjika i tidak null. Jika nilai variabel inihil, nilai integer 100 ditetapkan ke variabel j. Ini adalah cara kerja operator penggabungan nol.