Вдохновленный Попытка Фила Хаака по объединению нулей или пустых , я пытаюсь написать несколько методов расширения для объекта string
, а также для интерфейса IEnumerable<T>
, чтобы упростить null или emtpy ckecking. Однако у меня возникают проблемы: когда я пытаюсь вызвать string
версию AsNullIsEmpty
, компилятор обрабатывает мою строку как IEnumerable<char>
и, конечно, выдает неверный тип возврата.
Есть ли какой-нибудь способ наложить «анти-ограничение» на определение версии IEnumerable
, чтобы я мог сказать компилятору использовать его, когда тип T
равен , а не string
? Что-то вроде
public static IEnumerable<T> AsNullIfEmpty(this IEnumerable<T> items)
where T !: string
Я знаю, что могу просто поменять имя одного из них, но я хочу иметь такое же имя для согласованности.
Обновление: Оказывается, моя проблема с методами расширения была решена другим способом, путем исправления простой и глупой ошибки (я использовал str.IsNullOrEmpty()
, метод расширения на IEnumerable<T>
вместо string.IsNullOrEmpty(str)
...) но поскольку вопрос об ограничениях на дженерики по-прежнему интересен, я не буду его удалять.