Sự khác biệt giữa Guid.NewGuid()
và là new Guid()
gì?
Cái nào được ưa thích?
Sự khác biệt giữa Guid.NewGuid()
và là new Guid()
gì?
Cái nào được ưa thích?
Câu trả lời:
new Guid()
làm cho một hướng dẫn "0" trống rỗng (00000000-0000-0000-0000-000000000000 không hữu ích lắm).
Guid.NewGuid()
làm cho một hướng dẫn thực tế với một giá trị duy nhất, những gì bạn có thể muốn.
new Guid()
tương đương với Guid.Empty
.
Guid.NewGuid()
tạo một UUID mới bằng thuật toán được thiết kế để tạo ra va chạm rất, rất khó xảy ra.
new Guid()
tạo ra một UUID là tất cả các số không.
Nói chung, bạn sẽ thích cái trước hơn, bởi vì đó là điểm của UUID (trừ khi bạn nhận được nó từ một nơi khác).
Có những trường hợp bạn thực sự muốn UUID hoàn toàn bằng không, nhưng trong trường hợp này Guid.Empty
hoặcdefault(Guid)
rõ ràng hơn về ý định của bạn, và sẽ có ít cơ hội ai đó đọc nó mong đợi một giá trị duy nhất đã được tạo ra.
Trong tất cả các, new Guid()
không hữu ích do sự thiếu rõ ràng này, nhưng không thể có loại giá trị không có hàm tạo không tham số trả về giá trị toàn bộ số không và không.
Chỉnh sửa: Trên thực tế, có thể có một hàm tạo không tham số trên một loại giá trị không đặt mọi thứ thành 0 và null, nhưng bạn không thể làm điều đó trong C # và các quy tắc về khi nào nó sẽ được gọi và khi nào sẽ chỉ là một cấu trúc hoàn toàn bằng không được tạo ra là khó hiểu, vì vậy dù sao đó cũng không phải là một ý tưởng hay.
[Tôi hiểu đây là một chủ đề cũ, chỉ cần thêm một số chi tiết] Hai câu trả lời của Mark và Jon Hanna tổng hợp sự khác biệt, mặc dù nó có thể quan tâm một số điều đó
Guid.NewGuid()
Cuối cùng gọi CoCreateGuid (một cuộc gọi COM đến Ole32) (tham khảo tại đây ) và công việc thực tế được thực hiện bởi UuidCreate .
Guid.Empty có nghĩa là được sử dụng để kiểm tra xem một Guid có chứa tất cả các số không. Điều này cũng có thể được thực hiện thông qua việc so sánh giá trị của Hướng dẫn được đề cập với Hướng dẫn mới ()
Vì vậy, nếu bạn cần một mã định danh duy nhất , câu trả lời là Guid.NewGuid ()
Guid.NewGuid()
, vì nó tạo GUID như dự định.
Guid.NewGuid()
tạo một Guid
đối tượng trống , khởi tạo nó bằng cách gọiCoCreateGuid
và trả về đối tượng.
new Guid()
chỉ tạo ra một GUID trống (tất cả các số không, tôi nghĩ vậy).
Tôi đoán họ đã phải làm cho các nhà xây dựng công khai như Guid
là một struct
.