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 null
diperlakukan 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 x
adalah 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 x
menjadi 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.