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)