Jos*_*ant 2 c# generics extension-methods nullable
我有一个扩展方法,我想重载,所以它可以处理引用类型和可空值的类型.但是,当我尝试这样做时,我得到"已经宣布具有相同签名的成员".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");
Run Code Online (Sandbox Code Playgroud)
如果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];
}
Run Code Online (Sandbox Code Playgroud)