代码之家  ›  专栏  ›  技术社区  ›  Joseph Sturtevant

重载方法以支持引用类型和可为空的类型

  •  2
  • Joseph Sturtevant  · 技术社区  · 15 年前

    我有一个扩展方法,我想重载它,这样它就可以处理引用类型和可空值类型。然而,当我尝试这样做时,我得到“已声明具有相同签名的成员”。C#是否可以不使用 where 我的泛型方法上的限定符来区分它们?实现这一点的明显方法是为每个方法指定一个不同的名称,但对我来说,这似乎不是一个非常优雅的解决方案。什么是使这项工作的最佳方式?

    public static T Coalesce<T>(this SqlDataReader reader, string property) where T : class
    {
        return reader.IsDBNull(reader.GetOrdinal(property))
                   ? null
                   : (T) reader[property];
    }
    
    public static T? Coalesce<T>(this SqlDataReader reader, string property) where T : struct
    {
        return reader.IsDBNull(reader.GetOrdinal(property))
                   ? null
                   : (T?)reader[property];
    }
    
    // Usage
    var id = reader.Coalesce<System.Guid?>("OptionalID");
    
    2 回复  |  直到 15 年前
        1
  •  7
  •   Sam Harwell    15 年前

    如果 SqlDataReader.Item[string] object

    public static T Coalesce<T>(this SqlDataReader reader, string property)
    {
        return reader.IsDBNull(reader.GetOrdinal(property))
                   ? default(T)
                   : (T) reader[property];
    }
    
        2
  •  2
  •   Community basarat    7 年前