Data tidak selalu tiba dalam tipe yang sudah kita ketahui. Hasil pembacaan file, nilai dari pustaka lama, atau data yang disimpan dalam variabel object menyembunyikan tipe aslinya. Sebelum nilai itu dipakai, program perlu memastikan tipe aslinya terlebih dahulu. C# menyediakan empat operator untuk kebutuhan tersebut: is, as, typeof, dan sizeof.

Operator is: Memeriksa Tipe #

Operator is menguji apakah sebuah nilai bertipe tertentu dan menghasilkan bool. Operator ini juga mendukung pattern matching: bila pemeriksaan berhasil, nilai dapat langsung diikat ke variabel baru bertipe yang cocok; bentuk itu akan sering kita pakai bersama statement if di bagian control flow.

Operator as: Konversi yang Aman #

Operator as mencoba mengubah nilai ke tipe target. Bila tipe cocok, hasilnya nilai tersebut dengan tipe baru; bila tidak cocok, hasilnya null, bukan pesan galat. Operator as hanya berlaku untuk tipe reference dan tipe nullable.

typeof dan sizeof #

Operator typeof(Tipe) menghasilkan objek System.Type yang mendeskripsikan tipe tersebut, sedangkan sizeof(tipe) menghasilkan ukuran tipe dalam byte. Keduanya bekerja pada tipe, bukan pada nilai.

Contoh dan Bedah Baris #

csharp
object kotak1 = "Budi Santoso";
object kotak2 = 42;

Console.WriteLine(kotak1 is string);
Console.WriteLine(kotak1 is int);
Console.WriteLine(kotak2 is int);

string? sapaan = kotak1 as string;
Console.WriteLine(sapaan?.ToUpper());

object? angkaTeks = kotak2 as string;
Console.WriteLine(angkaTeks ?? "(null)");

Console.WriteLine(typeof(string));
Console.WriteLine(typeof(int));
Console.WriteLine(kotak2.GetType());
Console.WriteLine(sizeof(int));
Console.WriteLine(sizeof(decimal));
Console.WriteLine(sizeof(char));
Console.WriteLine(sizeof(bool));
Console.WriteLine(sizeof(double));

Output yang Dihasilkan:

text
True
False
True
BUDI SANTOSO
(null)
System.String
System.Int32
System.Int32
4
16
2
1
8

Mari kita telaah baris demi baris:

  1. Baris 1-2 (kotak1, kotak2): Dua variabel bertipe object menyimpan string dan int; variabel object dapat menampung nilai dari tipe mana pun.
  2. Baris 4-6 (is): kotak1 memang berisi string sehingga is string bernilai True; kotak1 bukan int (hasil False); kotak2 berisi int sehingga is int bernilai True.
  3. Baris 8-9 (as berhasil): kotak1 cocok dengan string, sehingga sapaan berisi teks dan sapaan?.ToUpper() mencetak BUDI SANTOSO.
  4. Baris 11-12 (as gagal): kotak2 berisi int, sehingga as string menghasilkan null dan operator ?? menggantinya dengan "(null)".
  5. Baris 14-16 (typeof dan GetType): typeof(string) menghasilkan System.String dan typeof(int) menghasilkan System.Int32; kotak2.GetType() juga menjawab System.Int32 karena method itu membaca tipe isi variabel saat program berjalan, bukan tipe yang tertulis di deklarasi.
  6. Baris 17-22 (sizeof): Ukuran int adalah 4 byte, decimal 16 byte, char 2 byte (Unicode), bool 1 byte, dan double 8 byte.