【问题标题】:Should I use a Guid and Guid.Empty or a nullable Guid?我应该使用 Guid 和 Guid.Empty 还是可以为空的 Guid?
【发布时间】:2013-07-18 12:19:04
【问题描述】:

我在某些情况下(例如,保存 Sql 参数的自定义类)可能需要也可能不需要变量。传统上,我总是将它们定义为Guid? 类型,并在使用前使用myGuid.HasValue 来检查有效值。

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

为了可读性,我更喜欢第一种用法,因为它感觉更干净,但如果有人能就这些方法中的一种方法是否比另一种方法更好(更快、更快或更正确)提出建议,我将不胜感激?

【问题讨论】:

  • 如果不需要,就永远不会使用?
  • 不是永远不会,但是例如,具有Guid 作为 id 字段的对象在持久化到数据库之前不会填充此字段。

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


【解决方案1】:

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

command.Parameters.AddWithValue("@guid", myNullableGuid)     

对比

command.Parameters.AddWithValue("@guid", 
    myGuid == Guid.Empty ? DBNull.Value : myGuid)    

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

【讨论】:

    【解决方案2】:

    我认为Guid? 的方法要好得多。巧合的是,默认值Guid 等于Guid.Empty 没有实际用途,可以视为null 值。例如,intbool 默认值的使用与其他值没有任何区别。 所以,恕我直言,您应该使用Guid? 保持一致。

    【讨论】:

      【解决方案3】:

      我通常使用如下声明:

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

      无论有无 NULL 值,它都能完美运行。

      【讨论】:

        猜你喜欢
        • 2011-06-02
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2011-05-03
        • 2019-06-11
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多