ความแตกต่างระหว่างGuid.NewGuid()
และnew Guid()
คืออะไร
เป็นที่หนึ่งที่ต้องการ?
ความแตกต่างระหว่างGuid.NewGuid()
และnew Guid()
คืออะไร
เป็นที่หนึ่งที่ต้องการ?
คำตอบ:
new Guid()
ทำให้ "ว่าง" all-0 guid (00000000-0000-0000-0000-0000-000000000000 ไม่มีประโยชน์มาก)
Guid.NewGuid()
สร้าง guid จริงด้วยค่าที่ไม่ซ้ำใครคุณอาจต้องการ
new Guid()
Guid.Empty
Guid.NewGuid()
สร้าง UUID ใหม่โดยใช้อัลกอริทึมที่ออกแบบมาเพื่อทำให้การชนกันมากไม่น่าเป็นไปได้
new Guid()
สร้าง UUID ที่เป็นศูนย์ทั้งหมด
โดยทั่วไปแล้วคุณจะชอบอดีตเพราะนั่นคือประเด็นของ UUID (เว้นแต่คุณจะได้รับจากที่อื่น)
มีหลายกรณีที่คุณต้องการ UUID ที่ไม่ต้องใช้ศูนย์ทั้งหมด แต่ในกรณีนี้Guid.Empty
หรือdefault(Guid)
ชัดเจนเกี่ยวกับความตั้งใจของคุณและมีโอกาสน้อยที่คนที่อ่านมันคาดหวังว่าคุณค่าที่เป็นเอกลักษณ์จะถูกสร้างขึ้น
โดยรวมแล้วnew Guid()
ไม่มีประโยชน์เนื่องจากการขาดความชัดเจน แต่เป็นไปไม่ได้ที่จะมีประเภทค่าที่ไม่มีตัวสร้างแบบไม่มีพารามิเตอร์ที่ส่งคืนค่า all-zeros-and-nulls
แก้ไข: จริง ๆ แล้วมันเป็นไปได้ที่จะมีตัวสร้างแบบไร้พารามิเตอร์ในประเภทค่าที่ไม่ได้ตั้งค่าทุกอย่างเป็นศูนย์และเป็นโมฆะ แต่คุณไม่สามารถทำได้ใน C # และกฎเกี่ยวกับเวลาที่มันจะถูกเรียกและเมื่อจะ การสร้างโครงสร้างแบบศูนย์ทั้งหมดนั้นสร้างความสับสนดังนั้นจึงไม่ใช่ความคิดที่ดี
[ฉันเข้าใจว่านี่เป็นหัวข้อเก่าเพียงเพิ่มรายละเอียดเพิ่มเติม] คำตอบสองข้อของมาร์คและจอนฮันนาสรุปความแตกต่างแม้ว่ามันอาจจะสนใจบ้าง
Guid.NewGuid()
ในที่สุดเรียก CoCreateGUID (โทร COM เพื่อ Ole32) (อ้างอิงที่นี่ ) และงานจริงจะกระทำโดยUuidCreate
Guid.Empty มีวัตถุประสงค์เพื่อใช้ในการตรวจสอบว่า Guid มีเลขศูนย์ทั้งหมดหรือไม่ สิ่งนี้สามารถทำได้โดยการเปรียบเทียบค่าของ Guid ที่เป็นปัญหากับGuid ใหม่ ()
ดังนั้นหากคุณต้องการตัวระบุที่ไม่ซ้ำกันคำตอบคือGuid.NewGuid ()
Guid.NewGuid()
เพราะมันสร้าง GUID ตามที่ตั้งใจไว้
Guid.NewGuid()
สร้างGuid
วัตถุที่ว่างเปล่าเริ่มต้นได้โดยการโทรCoCreateGuid
และส่งกลับวัตถุ
new Guid()
เพียงสร้าง GUID ที่ว่างเปล่า (คิดค่าศูนย์ทั้งหมด)
ผมคิดว่าพวกเขาจะต้องทำให้ประชาชนสร้างเป็นเป็นGuid
struct