我有某些场景(例如,保存Sql参数的自定义类),其中可能需要或不需要变量。传统上我总是将这些类型Guid?
定义为myGuid.HasValue
,并在使用之前使用Guid
检查有效值。
当然,在实践中,我也可以使用常规myGuid == Guid.Empty
并使用{{1}}执行有效值检查。
为了便于阅读,我更喜欢第一次使用,因为它感觉更干净但我很感激,如果有人可以建议这些方法中的一种更好(更快,更快或更正确)?
答案 0 :(得分:2)
如果参数在T-Sql端可以为null,那么我认为Guid?
更符合自然。特别是当与ADO.NET参数化查询一起使用时,可空类型在其值为DBNull.Value
时可以方便地转换为null
。如果您使用Guid.Empty
指示null,则需要检查该条件并将DBNull.Value
显式传递给您的命令/查询。 E.g:
command.Parameters.AddWithValue("@guid", myNullableGuid)
VS。
command.Parameters.AddWithValue("@guid",
myGuid == Guid.Empty ? DBNull.Value : myGuid)
除此之外,两种替代方案之间几乎没有性能差异。
答案 1 :(得分:1)
我认为使用Guid?
的方法要好得多。只是巧合,Guid
的默认值等于Guid.Empty
没有实际用途,可以视为null
值。例如,使用int
或bool
默认值而不区分其他值。
所以,恕我直言,你应该使用Guid?
保持一致。
答案 2 :(得分:1)
我通常使用如下声明:
Guid? objGuidStudent = null;
objGuidStudent = Students.FindByName('Oscar');
Classrooms.Add(x, y, z, objGuidStudent);
无论有没有NULL值,它都能很好地工作。