Подтвердить что ты не робот

Сравнить со значением по умолчанию или пустым?

Что такое правильная проверка:

Guid value;
// ...
if (value != Guid.Empty)

или

if (value != default(Guid))

Я думаю, что второй, но не могу объяснить, почему.

4b9b3361

Ответ 1

Так как Guid.Empty == default(Guid) это не имеет особого значения, но я бы предпочел Guid.Empty для удобочитаемости.

Ответ 2

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.Empty Field

Только для чтения экземпляра структуры Guid , значение которой равно всем нулям.

Когда мы пишем этот код,

Console.WriteLine(default(Guid));
Console.WriteLine(new Guid());

выходов;

00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000

Если вам нужна читаемость (что, я думаю, вам стоит) Guid.Empty, мне кажется лучше.

Ответ 3

Я бы сказал второе, потому что у вас есть запись в неинициализированном состоянии, поэтому она будет содержать значение по умолчанию. Вы проверяете, находится ли переменная в состоянии по умолчанию, а не в том ли она пуста - две разные проверки (IMO).

Guid.Empty является эквивалентом default(Guid) в .NET, поэтому с технической точки зрения это не имеет значения, однако, по сравнению с Guid.Empty, создается впечатление, что вы проверяете конкретное значение, а не запись находится в состоянии по умолчанию.

Ответ 4

Оба одинаковы!

Guid.Empty - это поле только для чтения Guid, имеющее значение {00000000-0000-0000-0000-000000000000}.

С default(Guid) компиляция создает постоянное значение, имеющее {00000000-0000-0000-0000-000000000000}.

В обоих случаях ваше значение сравнивается с другим значением где-то в памяти.

Используйте Guid.Empty для удобства чтения.
Используйте default(T), когда вы работаете с дженериками.

Ответ 5

Лично я бы использовал Guid.Empty для удобства чтения. Единственный раз, когда я действительно использую default, как это, когда нет других параметров, например, при проверке KeyValuePair.

Ответ 6

Вы должны использовать следующее:

var guidIsEmpty = value == Guid.Empty;

Оба являются технически правильными, однако, по сравнению с Guid.Empty, безусловно, делает более читаемым код.

Ответ 7

Я знаю, что это старый поток, но просто хотел перезвонить:

При определении значения по умолчанию для Guid в качестве параметра метода вам придется использовать default (Guid), а не Guid.Empty, поскольку Guid.Empty не считается константой времени компиляции.

Это скомпилирует:

private void MyMethod(Guid id = default(Guid))

Это не скомпилируется:

private void MyMethod(Guid id = Guid.Empty)