比较默认还是空?

Ser*_*lov 16 .net c#

什么是正确的检查:

Guid value;
// ...
if (value != Guid.Empty)
Run Code Online (Sandbox Code Playgroud)

要么

if (value != default(Guid))
Run Code Online (Sandbox Code Playgroud)

我认为第二个但无法解释原因.

slo*_*oth 28

因为Guid.Empty == default(Guid)它并不重要,但我更喜欢Guid.Empty可读性.

  • 我认为从可读性的角度来看两者都很好,它实际上归结为检查实际意味着什么.检查记录是否处于默认状态与检查记录是否包含空值(IMO)不同. (2认同)

Son*_*nül 7

Guid.Empty相当于new Guid(),也相当于default(Guid).

当你反编译Guid结构时,似乎;

public static readonly Guid Empty = new Guid();
Run Code Online (Sandbox Code Playgroud)

由于Guidstruct,来自默认值表 ;

通过将所有值类型字段设置为其默认值并将所有引用类型字段设置为null来生成的值.

由于字段类型Guid是,short,int,byte,(这类型的默认值是0),当我们用default(Guid)我们得到了Guid与所有字段0.

Guid.Empty Field

Guid结构只读实例,其值全为零.

当我们写这个代码;

Console.WriteLine(default(Guid));
Console.WriteLine(new Guid());
Run Code Online (Sandbox Code Playgroud)

输出;

00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
Run Code Online (Sandbox Code Playgroud)

如果你关心可读性(我认为你应该这样)Guid.Empty对我来说似乎更好.

  • 这是我做过的最不必要的解释`:)` (5认同)

Mar*_*der 5

两者是一样的!

Guid.Empty是 Guid 的只读字段,值为{00000000-0000-0000-0000-000000000000}

使用default(Guid)compile 创建一个常量值,具有{00000000-0000-0000-0000-000000000000}.

在这两种情况下,您的值都会与内存中某处的另一个值进行比较。

使用Guid.Empty以提高可读性。
在使用default(T)泛型时使用。