Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/323.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 与默认值或空值比较?_C#_.net - Fatal编程技术网

C# 与默认值或空值比较?

C# 与默认值或空值比较?,c#,.net,C#,.net,什么是正确的检查: Guid value; // ... if (value != Guid.Empty) 或 我认为是第二个,但无法解释原因。因为Guid.Empty==default(Guid)这其实并不重要,但我更喜欢Guid.Empty的可读性。我之所以说第二个,纯粹是因为您的记录处于未初始化状态,因此,它将包含默认值。您正在检查变量是否处于默认状态,而不是它是否为空-2个不同的检查(IMO) Guid.Empty相当于.NET中的default(Guid),因此从技术角度来看,与Gu

什么是正确的检查:

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


我认为是第二个,但无法解释原因。

因为
Guid.Empty==default(Guid)
这其实并不重要,但我更喜欢
Guid.Empty
的可读性。

我之所以说第二个,纯粹是因为您的记录处于未初始化状态,因此,它将包含默认值。您正在检查变量是否处于默认状态,而不是它是否为空-2个不同的检查(IMO)


Guid.Empty
相当于.NET中的
default(Guid)
,因此从技术角度来看,与
Guid.Empty
相比,这并不重要,但给我的印象是,您检查某个特定值,不是记录是否处于默认状态。

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

当你反编译结构时,它似乎是

public static readonly Guid Empty = new Guid();

由于
Guid
是一个
struct
,因此来自

通过将所有值类型字段设置为默认值而生成的值 值和所有引用类型字段设置为null

由于
Guid
的字段类型是,
short
int
byte
,(这种类型的默认值是
0
),当我们使用
default(Guid)
时,我们会得到一个
Guid
,所有字段都是
0

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

当我们写这段代码时

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

00000000-0000-0000-0000-000000000000
00000000-0000-0000-0000-000000000000
如果您关心可读性(我认为您应该这样做)
Guid.Empty对我来说似乎更好。

两者都是一样的


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

使用
default(Guid)
编译创建一个常量值,具有
{00000000-0000-0000-0000-00000000000000}

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

使用
Guid.Empty
以提高可读性。

使用泛型时使用
default(T)

我个人会使用
Guid.Empty
以提高可读性。我唯一一次真正像这样使用
default
是在没有其他选项的情况下,例如在检查
KeyValuePair
时,您应该使用以下选项:

var guidIsEmpty = value == Guid.Empty;

但是,与Guid相比,这两种方法在技术上都是正确的。空肯定会使代码更可读。

我知道这是一个旧线程,但我只是想插话:

将Guid的默认值定义为方法的参数时,必须使用默认值(Guid),而不是Guid.Empty作为Guid。Empty不被视为编译时常量

这将汇编:

private void MyMethod(Guid id = default(Guid))
这不会编译:

private void MyMethod(Guid id = Guid.Empty)

好。。。您想检查什么?第二个示例为您提供了
未分配局部变量“value”的使用
默认(Guid)=Guid.Empty
如果Guid并不总是相关的,那么可能有一个可空的Guid会更有意义?我认为从可读性的角度来看,这两个都很好,这实际上取决于支票的实际含义。检查记录是否处于默认状态不同于检查它是否包含空值(IMO)。这是我所做过的最不必要的解释
:)
谢谢@Mekuri,但这并不能直接回答问题。你的帖子作为评论很好,但是没有包含足够的信息来回答这个问题。
private void MyMethod(Guid id = Guid.Empty)