ind*_*dra 5 c# language-features nullable is-empty
我有某些场景(例如,保存 Sql 参数的自定义类),其中可能需要也可能不需要变量。传统上,我总是定义这些类型Guid?,并myGuid.HasValue在使用之前检查有效值。
当然,在实践中,我也可以使用常规Guids 并使用 执行有效值检查myGuid == Guid.Empty。
为了便于阅读,我更喜欢第一种用法,因为它感觉更干净,但如果有人能建议其中一种方法是否比另一种更好(更快、更快或更正确),我将不胜感激。
如果参数在 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)
否则,两种替代方案之间几乎没有性能差异。