我应该使用 Guid 和 Guid.Empty 还是可以为 null 的 Guid?

ind*_*dra 5 c# language-features nullable is-empty

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

当然,在实践中,我也可以使用常规Guids 并使用 执行有效值检查myGuid == Guid.Empty

为了便于阅读,我更喜欢第一种用法,因为它感觉更干净,但如果有人能建议其中一种方法是否比另一种更好(更快、更快或更正确),我将不胜感激。

Ere*_*mez 3

如果参数在 T-Sql 端可以为 null,那么我认为这Guid?是更自然的选择。特别是当与 ADO.NET 参数化查询一起使用时,可空类型可以方便地转换为DBNull.Value它们的值为null. 如果您要用来Guid.Empty指示 null,那么您需要检查该条件并显式传递DBNull.Value给您的命令/查询。例如:

command.Parameters.AddWithValue("@guid", myNullableGuid)     
Run Code Online (Sandbox Code Playgroud)

command.Parameters.AddWithValue("@guid", 
    myGuid == Guid.Empty ? DBNull.Value : myGuid)    
Run Code Online (Sandbox Code Playgroud)

否则,两种替代方案之间几乎没有性能差异。