我有一些场景(例如自定义类来保存Sql参数),其中某些变量可能需要,也可能不需要。传统上,我总是将这些定义为Guid?
类型,并使用myGuid.HasValue
检查是否存在有效值,然后再使用。
当然,在实际应用中,我也可以使用常规的Guid
,并使用myGuid == Guid.Empty
检查是否存在有效值。
出于可读性考虑,我更喜欢第一种用法,因为它感觉更清晰。但我希望有人能够建议哪种方法比另一种方法更好(更快速、更快捷或更正确)。
我有一些场景(例如自定义类来保存Sql参数),其中某些变量可能需要,也可能不需要。传统上,我总是将这些定义为Guid?
类型,并使用myGuid.HasValue
检查是否存在有效值,然后再使用。
当然,在实际应用中,我也可以使用常规的Guid
,并使用myGuid == Guid.Empty
检查是否存在有效值。
出于可读性考虑,我更喜欢第一种用法,因为它感觉更清晰。但我希望有人能够建议哪种方法比另一种方法更好(更快速、更快捷或更正确)。
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)
我认为使用 Guid?
的方法更好。这只是巧合,Guid
的默认值 Guid.Empty
没有实际用途,可以视为 null
值。例如,int
或 bool
的默认值与其他值没有任何区别。
因此,在我看来,您应该使用 Guid?
以保持一致。
我通常使用以下方式进行声明:
Guid? objGuidStudent = null;
objGuidStudent = Students.FindByName('Oscar');
Classrooms.Add(x, y, z, objGuidStudent);
Guid
作为id字段的对象在被持久化到数据库之前不会填充该字段。 - immutabl