Ответ 1
Так как Guid.Empty == default(Guid)
это не имеет особого значения, но я бы предпочел Guid.Empty
для удобочитаемости.
Что такое правильная проверка:
Guid value;
// ...
if (value != Guid.Empty)
или
if (value != default(Guid))
Я думаю, что второй, но не могу объяснить, почему.
Так как Guid.Empty == default(Guid)
это не имеет особого значения, но я бы предпочел Guid.Empty
для удобочитаемости.
Guid.Empty
эквивалентен new Guid()
, что также эквивалентно default(Guid)
.
Когда вы декомпилируете Guid
, похоже,
public static readonly Guid Empty = new Guid();
Так как Guid
является struct
, из Таблица значений по умолчанию;
Значение, созданное установкой всех полей типа значения в их значение по умолчанию значения и все поля ссылочного типа в значение null.
Так как типы полей Guid
: short
, int
, byte
, (и это значение по умолчанию 0
), когда мы используем default(Guid)
, получаем a Guid
со всеми поля 0
.
Только для чтения экземпляра структуры Guid , значение которой равно всем нулям.
Когда мы пишем этот код,
Console.WriteLine(default(Guid));
Console.WriteLine(new Guid());
выходов;
00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
Если вам нужна читаемость (что, я думаю, вам стоит) Guid.Empty
, мне кажется лучше.
Я бы сказал второе, потому что у вас есть запись в неинициализированном состоянии, поэтому она будет содержать значение по умолчанию. Вы проверяете, находится ли переменная в состоянии по умолчанию, а не в том ли она пуста - две разные проверки (IMO).
Guid.Empty
является эквивалентом default(Guid)
в .NET, поэтому с технической точки зрения это не имеет значения, однако, по сравнению с Guid.Empty
, создается впечатление, что вы проверяете конкретное значение, а не запись находится в состоянии по умолчанию.
Оба одинаковы!
Guid.Empty
- это поле только для чтения Guid, имеющее значение {00000000-0000-0000-0000-000000000000}
.
С default(Guid)
компиляция создает постоянное значение, имеющее {00000000-0000-0000-0000-000000000000}
.
В обоих случаях ваше значение сравнивается с другим значением где-то в памяти.
Используйте Guid.Empty
для удобства чтения.
Используйте default(T)
, когда вы работаете с дженериками.
Лично я бы использовал Guid.Empty
для удобства чтения. Единственный раз, когда я действительно использую default
, как это, когда нет других параметров, например, при проверке KeyValuePair
.
Вы должны использовать следующее:
var guidIsEmpty = value == Guid.Empty;
Оба являются технически правильными, однако, по сравнению с Guid.Empty, безусловно, делает более читаемым код.
Я знаю, что это старый поток, но просто хотел перезвонить:
При определении значения по умолчанию для Guid в качестве параметра метода вам придется использовать default (Guid), а не Guid.Empty, поскольку Guid.Empty не считается константой времени компиляции.
Это скомпилирует:
private void MyMethod(Guid id = default(Guid))
Это не скомпилируется:
private void MyMethod(Guid id = Guid.Empty)