Seseorang berkata di utas diskusi ini bahwa Anda tidak dapat membuat string dari ketiadaan.
(yang merupakan ungkapan yang bagus seperti yang saya pikirkan). Tapi ya - Anda dapat :-), seperti yang ditunjukkan contoh berikut:
var x = null + (string)null;
var wtf = x.ToString();
berfungsi dengan baik dan tidak membuang pengecualian sama sekali. Satu-satunya perbedaan adalah bahwa Anda perlu membuang salah satu nulls ke dalam string - jika Anda menghapus cast (string) , maka contohnya masih mengkompilasi, tetapi melempar pengecualian run-time: "Operator '+' ambigu pada operan dari ketik '<null>' dan '<null>' ".
NB Dalam contoh kode di atas, nilai x tidak nol seperti yang Anda harapkan, itu sebenarnya adalah string kosong setelah Anda memasukkan salah satu operan ke dalam string.
Fakta lain yang menarik adalah bahwa dalam C # /. NET cara nulldiperlakukan tidak selalu sama jika Anda menganggap tipe data yang berbeda. Sebagai contoh:
int? x = 1; // string x = "1";
x = x + null + null;
Console.WriteLine((x==null) ? "<null>" : x.ToString());
Mengenai baris pertama dari cuplikan kode: If xadalah variabel integer yang dapat dibatalkan (misint? ) yang berisi nilai 1, maka Anda mendapatkan hasilnya <null>kembali. Jika itu adalah string (seperti yang ditunjukkan dalam komentar) dengan nilai "1", maka Anda akan "1"kembali daripada <null>.
NB Juga menarik: Jika Anda menggunakan var x = 1;untuk baris pertama, maka Anda mendapatkan kesalahan runtime. Mengapa? Karena tugas akan mengubah variabel xmenjadi tipe data int, yang tidak dapat dibatalkan. Compiler tidak berasumsi di int?sini, dan karenanya gagal di baris ke-2 di mananull ditambahkan.
null.ToString()diberi namawtf. Mengapa itu mengejutkan Anda? Anda tidak dapat memanggil metode contoh saat Anda tidak memiliki alasan untuk memanggilnya.