Почему конструктор Guid без параметров генерирует пустой GUID? - PullRequest
17 голосов
/ 30 декабря 2008

Почему конструктор Guid без параметров генерирует пустой GUID, а не значение по умолчанию для сгенерированного, как с Guid.NewGuid ()?

Есть ли конкретное применение для пустого Guid?

Ответы [ 4 ]

33 голосов
/ 30 декабря 2008

Почему конструктор Guid без параметров генерирует пустой GUID, а не значение по умолчанию для сгенерированного, как с Guid.NewGuid ()?

Краткий ответ: поскольку язык / среда выполнения не позволяли конструктору типа Guid определить конструктор по умолчанию.

Не только условно, что значение структуры "по умолчанию" равно нулю, вы просто не можете определить конструктор по умолчанию для структуры. Когда вы говорите new Guid (), среда выполнения дает вам новый объект, в котором все поля инициализируются со значениями по умолчанию: http://msdn.microsoft.com/en-us/library/ah19swz4%28VS.71%29.aspx

Некоторое обоснование можно найти здесь: http://www.yoda.arachsys.com/csharp/faq/#struct.constructors

3 голосов
/ 30 декабря 2008

Это поведение согласуется с остальными типами значений в .Net Framework. При «обновлении» типа значения используется значение по умолчанию. Это просто случай по умолчанию для Guid, аналогичный значению по умолчанию Int32, равному 0.

2 голосов
/ 30 декабря 2008

Я думаю, что общепринятым является то, что значением по умолчанию для структуры или встроенного типа является ноль.

2 голосов
/ 30 декабря 2008

Пустой guid полезен для обозначения отсутствия Guid. Поскольку типы значений не обнуляются (по умолчанию да, вы можете использовать обнуляемое значение).

Например, я часто использую свойства Guid в качестве идентификатора, потому что с ними очень легко работать. Таким образом, один из способов проверить, сохранился ли объект (когда он получает свой Id), можно сравнить значение id с пустым guid.

...