У меня есть метод расширения, который я бы хотел перегрузить, чтобы он мог обрабатывать как ссылочные типы, так и типы значений, допускающие значения NULL. Однако, когда я пытаюсь сделать это, я получаю «Участник с такой же подписью уже объявлен». Может ли 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");