我应该使用Guid和Guid.Empty还是可空的Guid?

5

我有一些场景(例如自定义类来保存Sql参数),其中某些变量可能需要,也可能不需要。传统上,我总是将这些定义为Guid?类型,并使用myGuid.HasValue检查是否存在有效值,然后再使用。

当然,在实际应用中,我也可以使用常规的Guid,并使用myGuid == Guid.Empty检查是否存在有效值。

出于可读性考虑,我更喜欢第一种用法,因为它感觉更清晰。但我希望有人能够建议哪种方法比另一种方法更好(更快速、更快捷或更正确)。


如果不需要,它永远不会被使用? - Sam Leach
不是从来不会,但例如一个带有Guid作为id字段的对象在被持久化到数据库之前不会填充该字段。 - immutabl
3个回答

3
如果T-Sql端的参数可以为空,那么我认为Guid?更加自然地适合。特别是在与ADO.NET参数化查询一起使用时,可空类型会方便地被转换为DBNull.Value,当它们的值为null时。如果您要使用Guid.Empty来表示null,那么您需要检查这个条件,并显式地将DBNull.Value传递给您的命令/查询。例如:
command.Parameters.AddWithValue("@guid", myNullableGuid)     

与。

command.Parameters.AddWithValue("@guid", 
    myGuid == Guid.Empty ? DBNull.Value : myGuid)    

两种选择在性能方面几乎没有区别。

2

我认为使用 Guid? 的方法更好。这只是巧合,Guid 的默认值 Guid.Empty 没有实际用途,可以视为 null 值。例如,intbool 的默认值与其他值没有任何区别。 因此,在我看来,您应该使用 Guid? 以保持一致。


1

我通常使用以下方式进行声明:

Guid? objGuidStudent = null;
objGuidStudent = Students.FindByName('Oscar');
Classrooms.Add(x, y, z, objGuidStudent);

它能够完美运行,无论是否存在NULL值。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接