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

时间:2013-07-18 12:19:05

标签: c# nullable language-features is-empty

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

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

为了便于阅读,我更喜欢第一次使用,因为它感觉更干净但我很感激,如果有人可以建议这些方法中的一种更好(更快,更快或更正确)?

3 个答案:

答案 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值。例如,使用intbool默认值而不区分其他值。 所以,恕我直言,你应该使用Guid?保持一致。

答案 2 :(得分:1)

我通常使用如下声明:

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

无论有没有NULL值,它都能很好地工作。