Apa perbedaan antara Guid.NewGuid()
dan new Guid()
?
Mana yang lebih disukai?
Apa perbedaan antara Guid.NewGuid()
dan new Guid()
?
Mana yang lebih disukai?
Jawaban:
new Guid()
membuat pemandu all-0 "kosong" (00000000-0000-0000-0000-000000000000 tidak sangat berguna).
Guid.NewGuid()
membuat panduan aktual dengan nilai unik, apa yang mungkin Anda inginkan.
new Guid()
setara dengan Guid.Empty
.
Guid.NewGuid()
membuat UUID baru menggunakan algoritma yang dirancang untuk membuat tabrakan sangat, sangat tidak mungkin.
new Guid()
menciptakan UUID yang semuanya nol.
Secara umum Anda lebih suka yang pertama, karena itulah gunanya UUID (kecuali jika Anda menerimanya dari tempat lain tentunya).
Ada kasus di mana Anda memang menginginkan UUID sepenuhnya nol, tetapi dalam kasus ini Guid.Empty
atau default(Guid)
lebih jelas tentang niat Anda, dan ada sedikit peluang seseorang membacanya mengharapkan nilai unik telah dibuat.
Secara keseluruhan, new Guid()
tidak terlalu berguna karena kurangnya kejelasan ini, tetapi tidak mungkin untuk memiliki tipe-nilai yang tidak memiliki konstruktor tanpa parameter yang mengembalikan nilai all-nol-dan-nulls.
Sunting: Sebenarnya, adalah mungkin untuk memiliki konstruktor tanpa parameter pada tipe nilai yang tidak mengatur semuanya menjadi nol dan nol, tetapi Anda tidak dapat melakukannya di C #, dan aturan tentang kapan akan dipanggil dan kapan akan ada hanya menjadi semua-nol struct yang dibuat membingungkan, jadi itu bukan ide yang baik pula.
[Saya mengerti ini adalah utas lama, hanya menambahkan beberapa detail lagi]. Dua jawaban oleh Mark dan Jon Hanna meringkaskan perbedaan, meskipun mungkin menarik beberapa yang
Guid.NewGuid()
Akhirnya panggilan CoCreateGuid (panggilan COM ke Ole32) (referensi di sini ) dan pekerjaan yang sebenarnya dilakukan oleh UuidCreate .
Guid.Empty dimaksudkan untuk digunakan untuk memeriksa apakah Guid berisi semua nol. Ini juga bisa dilakukan dengan membandingkan nilai Guid yang dimaksud dengan Guid baru ()
Jadi, jika Anda memerlukan pengidentifikasi unik , jawabannya adalah Guid.NewGuid ()
Guid.NewGuid()
, karena membuat GUID sebagaimana dimaksud.
Guid.NewGuid()
membuat Guid
objek kosong , menginisialisasi dengan memanggil CoCreateGuid
dan mengembalikan objek.
new Guid()
hanya membuat GUID kosong (semua nol, saya pikir).
Saya kira mereka harus membuat konstruktor menjadi publik sebagaimana Guid
adanya struct
.