我有一个扩展方法,我想重载它,这样它就可以处理引用类型和可空值类型。然而,当我尝试这样做时,我得到“已声明具有相同签名的成员”。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");